iOS/Swift

[swift] SnapKit์— ๋Œ€ํ•ด์„œ ( + update Constraints ์ด์Šˆ)

๊ฒฝํ‘ธ 2022. 2. 15. 15:24
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š”~

 

์˜ค๋Š˜์€ ์ œ๊ฐ€ ์• ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ SnapKit์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•˜๊ณ 

๋ฐœ์ƒํ–ˆ๋˜ ์ƒ๊ฒผ๋˜ ์ด์Šˆ๋ฅผ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

SnapKit์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ธฐ ์ด์ „์—

Swift์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ ˆ์ด์•„์›ƒ์˜ ์ œ์•ฝ์กฐ๊ฑด์„ ์ฃผ๊ธฐ ์œ„ํ•ด์„œ๋Š”

Anchor์˜ constraint๋ฅผ ์ด์šฉํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ๊ณ„์‹ค ๊ฒ๋‹ˆ๋‹ค.

var testButton = UIButton()

// translatesAutoresizingMaskIntoConstraints์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ture๋กœ ์„ค์ •๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.
// ์ด๋Š” ์ž๋™์œผ๋กœ ์ œ์•ฝ์„ ๋ฐ˜๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ ์ œ๊ฐ€ ์ค€ ์ œ์•ฝ์กฐ๊ฑด์„ ๋”ฐ๋ฅด๊ธฐ ์œ„ํ•ด์„œ๋Š” false๋กœ ์„ค์ •ํ•ด์•ผํ•˜์ฃ !
testButton.translatesAutoresizingMaskIntoConstraints = fale

view.addSubview(testButton)

//๊ทธ๋ฆฌ๊ณ  ๋˜ ํ•œ๊ฐ€์ง€! ๋ฐ”๋กœ .isActive๋ฅผ = true๋กœ ์„ค์ •ํ•ด์•ผ ์ œ์•ฝ์กฐ๊ฑด์ด ์„ค์ •๋ฉ๋‹ˆ๋‹น
testButton.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 15).isActive = true

์œ„์˜ ์ฝ”๋“œ๋ฅผ ๋ณด์‹œ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ œ์•ฝ์กฐ๊ฑด์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

 

1. ๊ฐ์ฒด ์ƒ์„ฑ

2. translatesAutoresizingMaskIntoConstraints = false

3. ์ œ์•ฝ์กฐ๊ฑด ์„ค์ •

4. isActive ์„ค์ •

 

ํ•˜๋‚˜์˜ ๊ฐ์ฒด์ผ ๊ฒฝ์šฐ ์ˆ˜๊ณ ๊ฐ€ ๋œํ•˜์ง€๋งŒ ๋งŒ์•ฝ ์—ฌ๋Ÿฌ ๊ฐœ๋ผ๋ฉด ์ฝ”๋“œ์˜ ๊ธธ์ด๊ฐ€ ๋Š˜์–ด๋‚˜๊ณ  

๋ฌด์—‡๋ณด๋‹ค ๊ฐ€๋…์„ฑ์ด ์ข‹์ง€ ์•Š์•˜๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ ๊ธฐ์กด์˜ ์ž‘์—…๋ณด๋‹ค

์ง๊ด€์ ์œผ๋กœ ์ œ์•ฝ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ

SnapKit์„ ์• ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ฐ™์€ UI๋ฅผ SnapKit์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

import SnapKit

var testButton = UIButton()

view.addSubview(testButton)

// ํด๋กœ์ € ํ˜•ํƒœ๋กœ ์ œ์•ฝ์กฐ๊ฑด์„ ๋ฐ”๋กœ!
// translatesAutoresizingMaskIntoConstraints์˜ ๊ฐ’์„ ๋ฐ”๋กœ false๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ๊ณ 
// isActive์˜ ๊ฒฝ์šฐ์—๋„ ๋ฐ”๋กœ true๋กœ ์ฒ˜๋ฆฌํ•ด์ค๋‹ˆ๋‹ค
testButton.snp.makeConstraints { make in
  make.leading.equalTo(15)
}

 


 

๊ฐœ๋ฐœ ์ด์Šˆ

๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์—ˆ๋˜ ๊ฒƒ์€

๋ฒ„ํŠผ์˜ ์ œ์•ฝ์กฐ๊ฑด์„ ์—…๋ฐ์ดํŠธํ•ด ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ๋ฅผ ์ฃผ๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์•Œ๊ณ  ์žˆ๋˜ updateConstraints๋ฅผ ์ด์šฉํ–ˆ์—ˆ๋Š”๋ฐ

 

fatalError : Updated constraint could not find existing matching constraint to update: \(layoutConstraint) 

 

์œ„์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ๋œ ์ œ์•ฝ ์กฐ๊ฑด์ด ์—…๋ฐ์ดํŠธํ•  ๊ธฐ์กด ์ผ์น˜ ์ œ์•ฝ ์กฐ๊ฑด์„ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๋Š” ์˜ค๋ฅ˜์˜€์Šต๋‹ˆ๋‹ค.

 

์ด์œ 

updateConstraints์˜ ๊ฒฝ์šฐ ๊ธฐ์กด์— ์ œ์•ฝ์กฐ๊ฑด์ด ๊ฑธ๋ ค์žˆ๋˜ ๊ฒƒ์„ ์ฐพ์•„์„œ ์—…๋ฐ์ดํŠธํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๊ธฐ์กด์—๋Š” ์—†๋˜ Constraint๋ฅผ update ํ•  ๋•Œ ๋ถ€์—ฌํ•˜๋ ค๊ณ  ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ธ๋ฐ์ •ํ™•ํ•œ ์ด์œ ์ธ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ๋น„์œจ๋กœ width์˜ ์ œ์•ฝ์กฐ๊ฑด์„ ์ฃผ๊ณ  ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฐพ์„ ์ˆ˜ ์—†์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. 

 

์ ์šฉ

ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์ด๋ผ๊ณ ๋Š” ํ•  ์ˆ˜ ์—†์ง€๋งŒ

๊ธฐ์กด์— ์žˆ๋˜ width๋ฅผ ๋น„์œจ์ด ์•„๋‹Œ ์ƒ์ˆ˜๊ฐ’์œผ๋กœ ์ ์šฉํ–ˆ๋”๋‹ˆ ์ •์ƒ์ ์œผ๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ๋™์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์ •ํ™•ํ•œ ์ด์œ ๋ฅผ ๋‹ค์‹œ ์ฐพ์•„๋ณด๊ณ  ์ด ํฌ์ŠคํŒ…์— ์ถ”๊ฐ€ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•