updateConstraints VS remakeConstraints 의 차이?updateConstraintsremakeConstraintsconstant value만 변경되는 것이 아닌, 기준이 될 view도 업데이트
remakeConstraints는 top,leading,trailing,bottom의 기준이 아예 바뀌는 경우 바뀐 기준에 맞게 다시 재구성해준다.
예시로 이해하기
👉 기본 제약조건 (기본 → 가운데 정렬)
addressEditButton의 경우 leading, centerY, height에 대해 제약조건 적용timeEditButton의 경우 trailing, centerY, width, height에 대해 제약조건 적용**addressEditButton.snp.makeConstraints { make in
make.leading.equalToSuperview()
make.centerY.equalToSuperview()
make.height.equalTo(34)
}
timeEditButton.snp.makeConstraints { make in
make.trailing.equalToSuperview()
make.centerY.equalToSuperview()
make.width.equalTo(84)
make.height.equalTo(30)
}**

addressEditButton의 경우 top, leading, height에 대해 제약조건 적용
👉 기본 제약조건에서 기준이 되는 곳들이 달라지기 때문에 **remakeConstraints**로 해야함 (updateConstraints 시 오류)
새로 추가되는 기준이 있을 때 사용
// 각 row에 대한 셀 구성
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: PointEditTableViewCell.cellIdentifier, for: indexPath) as? PointEditTableViewCell else {
return UITableViewCell()
}
cell.addressEditButton.setTitle("주소를 검색해주세요.", for: .normal)
cell.timeTypeLabel.text = "출발"
cell.timeEditButton.setTitle("오전 08:00", for: .normal)
if indexPath.row == 0 {
**cell.addressEditButton.snp.remakeConstraints { make in
make.top.equalToSuperview().inset(10)
make.leading.equalToSuperview()
make.height.equalTo(34)
}
cell.timeEditButton.snp.remakeConstraints { make in
make.trailing.equalToSuperview()
make.top.equalToSuperview().inset(10)
make.width.equalTo(84)
make.height.equalTo(30)
}**
} else if indexPath.row == 4 { // TODO: - 포인트 배열의 마지막 인덱스로
**cell.addressEditButton.snp.remakeConstraints { make in
make.leading.equalToSuperview()
make.bottom.equalToSuperview().inset(10)
make.height.equalTo(34)
}
cell.timeEditButton.snp.remakeConstraints { make in
make.trailing.equalToSuperview()
make.bottom.equalToSuperview().inset(10)
make.width.equalTo(84)
make.height.equalTo(30)
}**
}
return cell
}


기존 제약조건
아예 새로 재구성하기 때문에 기존의 제약조건 중 유지하고 싶은 조건이 있다면 다시 작성해줘야 한다.
// 각 row에 대한 셀 구성
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: PointEditTableViewCell.cellIdentifier, for: indexPath) as? PointEditTableViewCell else {
return UITableViewCell()
}
cell.addressEditButton.setTitle("주소를 검색해주세요.", for: .normal)
cell.timeTypeLabel.text = "출발"
cell.timeEditButton.setTitle("오전 08:00", for: .normal)
if indexPath.row == 0 {
cell.addressEditButton.snp.remakeConstraints { make in
make.top.equalToSuperview().inset(10)
make.leading.equalToSuperview()
**// height 제약조건을 삭제할 경우**
}
cell.timeEditButton.snp.remakeConstraints { make in
make.trailing.equalToSuperview()
make.top.equalToSuperview().inset(10)
make.width.equalTo(84)
make.height.equalTo(30)
}
} else if indexPath.row == 4 { // TODO: - 포인트 배열의 마지막 인덱스로
cell.addressEditButton.snp.remakeConstraints { make in
make.leading.equalToSuperview()
make.bottom.equalToSuperview().inset(10)
make.height.equalTo(34)
}
cell.timeEditButton.snp.remakeConstraints { make in
make.trailing.equalToSuperview()
make.bottom.equalToSuperview().inset(10)
make.width.equalTo(84)
make.height.equalTo(30)
}
}
return cell
}

기존의 높이가 사라진 것을 볼 수 있다.
✅ **updateConstraints**를 사용하고 싶을 경우
centerY 제거된 경우 참고)// 각 row에 대한 셀 구성
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: PointEditTableViewCell.cellIdentifier, for: indexPath) as? PointEditTableViewCell else {
return UITableViewCell()
}
cell.addressEditButton.setTitle("주소를 검색해주세요.", for: .normal)
cell.timeTypeLabel.text = "출발"
cell.timeEditButton.setTitle("오전 08:00", for: .normal)
if indexPath.row == 0 {
cell.addressEditButton.snp.**updateConstraints** { make in
make.leading.equalToSuperview()
**// centerY 제약조건 제거
make.height.equalTo(20) // height 제약조건 상수값 변경**
}
**** cell.timeEditButton.snp.**updateConstraints** { make in
make.trailing.equalToSuperview()
**// centerY 제약조건 제거**
make.width.equalTo(84)
make.height.equalTo(30)
**}**
} else if indexPath.row == 4 { // TODO: - 포인트 배열의 마지막 인덱스로
cell.addressEditButton.snp.**updateConstraints** { make in
make.leading.equalToSuperview()
**// centerY 제약조건 제거**
make.height.equalTo(34)
**}**
cell.timeEditButton.snp.**updateConstraints** { make in
make.trailing.equalToSuperview()
**// centerY 제약조건 제거
make.width.equalTo(60) // width 제약조건 상수값 변경**
make.height.equalTo(30)
**}**
}
return cell
}


기존 제약조건