iOS/Swift

[swift] ์ฑ„ํŒ… UI ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ(2)

๊ฒฝํ‘ธ 2022. 3. 9. 23:50
๋ฐ˜์‘ํ˜•
 

[swift] ์ฑ„ํŒ… UI๋ฅผ ๋งŒ๋“ค์–ด๋ด…์‹œ๋‹ค!(1)

์•ˆ๋…•ํ•˜์„ธ์œ ~ ( ์˜ค๋Š˜ ์ด ์ธํŠธ๋กœ๋กœ ๋†€๋ฆผ์„ ๋ฐ›์•˜๋‹ต๋‹ˆ๋‹ค... ) ์˜ค๋Š˜์€ ์ฑ„ํŒ… UI๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์ ์–ด๋ณด๋ ค๊ณ  ํ•ด์š”! ๋ช‡ ๊ฐœ์˜ ํฌ์ŠคํŒ…์ด ๋ ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ผ๋‹จ ์‹œ์ž‘ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹นใ…Žใ…Ž ์ฑ„ํŒ… ์˜์ƒ

pooh-footprints.tistory.com

[ ์ฒซ ๋ฒˆ์งธ ํฌ์ŠคํŒ… ์ฐธ๊ณ  โฌ† ]

 

์ด์ „ ํฌ์ŠคํŒ…์—์„œ๋Š” ์…€์„ ๋“ฑ๋กํ•˜๊ณ  ํ™•์ธ๋งŒ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ ์šฉํ•ด ๋ดค๋‹ค๋ฉด ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š”

 

(1) ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ, ๊ฐ€์žฅ ์ตœ๊ทผ ์ฃผ๊ณ ๋ฐ›์€ ๊ฒƒ์ด ํ•˜๋‹จ์— ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

(2) ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ, ์ž๋™์œผ๋กœ ๋งˆ์ง€๋ง‰์— ์ฃผ๊ณ ๋ฐ›์€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ์Šคํฌ๋กค์˜ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•

 

์œ„์˜ ๋‘๊ฐ€์ง€๋ฅผ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

์• ํ”Œ ๊ฐœ๋ฐœ์ž ๋ฌธ์„œ๋ฅผ ๋จผ์ € ์‚ดํŽด๋ด…์‹œ๋‹ค.

 

Apple Developer Documentation

 

developer.apple.com

 

 

 

ํ•ด๋‹น ๋ฉ”์„œ๋“œ ์„ค๋ช…์„ ๋ณด๋ฉด Index Path๋ฅผ ํ†ตํ•ด ์‹๋ณ„ํ•œ ํ–‰์ด

ํ™”๋ฉด์˜ ํŠน์ • ์œ„์น˜์— ์žˆ์„ ๋•Œ๊นŒ์ง€ ์Šคํฌ๋กคํ•œ๋‹ค๊ณ  ๋‚˜์™€์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•ด๋ณด๋ฉด

- IndexPath : ํ–‰๊ณผ ์„น์…˜์„ ๋„˜๊ฒจ์ค„์ˆ˜ ์žˆ๋Š” ์ธ๋ฑ์Šค ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค.

- ScrollPosition : ์Šคํฌ๋กค์ด ๋๋‚  ๋•Œ ํ…Œ์ด๋ธ”์˜ ์ƒ๋Œ€ ์œ„์น˜๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ top, middle, bottom 3๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

- Animated : ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•œ Bool ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜ ์ž…๋‹ˆ๋‹ค.

 

์ด ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์— ์ ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

1. ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ๋•Œ 

2. ๋ฉ”์„ธ์ง€๋ฅผ ์ˆ˜์‹ ํ•  ๋•Œ 

 

๋ฉ”์„ธ์ง€๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” ๊ฒƒ์„ ์˜ˆ์‹œ๋กœ ์ž‘์„ฑํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

// ์†Œ์ผ“ํ†ต์‹ ์„ ์ด์šฉํ•ด ์ˆ˜์‹ ํ•œ ๋ฉ”์„ธ์ง€๊ฐ€ ์žˆ๋‹ค๋ฉด ํ…Œ์ด๋ธ”๋ทฐ์— ์ถ”๊ฐ€ํ•˜๊ณ  ์Šคํฌ๋กค
@objc func getMessage(push: NSNotification) {

    '''
    ์ƒ๋žต
    '''
    
    self.viewModel.chatList.append(chatting)
    self.tableView.reloadData()
    self.tableView.scrollToRow(at: IndexPath(row: self.viewModel.chatList.count - 1, section: 0), at: .bottom, animated: false)
}

์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜๋ฉด 

๋ฉ”์„ธ์ง€๋ฅผ ์ˆ˜์‹ ํ•˜์˜€์„ ๋•Œ

IndexPath๊ฐ€ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ๋“ค์–ด์˜จ ์ฑ„ํŒ…์ด๋ฏ€๋กœ

bottom ์˜ต์…˜์œผ๋กœ ์ธํ•ด ํ•ด๋‹น ์ธ๋ฑ์Šค์˜ ํ•˜๋‹จ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

์นด์นด์˜คํ†ก ๊ฐ™์€ ๊ฒฝ์šฐ์— ๋ฉ”์‹œ์ง€๊ฐ€ ์˜ค๋”๋ผ๋„

๋ฐ”๋กœ ๋งˆ์ง€๋ง‰ ์ฑ„ํŒ…๋‚ด์—ญ์œผ๋กœ ๋‚ด๋ ค๊ฐ€์ง€ ์•Š๋Š”๋ฐ

๋งˆ์ง€๋ง‰ ์ฑ„ํŒ…๋‚ด์—ญ์ด ํ˜„์žฌ Visibleํ•˜๋‹ค๋ฉด ๋‚ด๋ ค์ฃผ๊ณ 

์•„๋‹ˆ๋ผ๋ฉด ์˜ค๋ฅธ์ชฝ ํ•˜๋‹จ์— ๊ฐ€์žฅ ๋ฐ‘์˜ ์…€๋กœ ์ด๋™์‹œ์ผœ์ฃผ๋Š” ๋ฒ„ํŠผ์„ ์ฃผ๋Š”๊ฒŒ ์•„๋‹Œ๊ฐ€ ์ƒ๊ฐ์ด ๋“œ๋„ค์š”.

๋‚˜์ค‘์— ๊ตฌํ˜„ํ•˜๊ฒŒ ๋˜๋ฉด ํฌ์ŠคํŒ… ํ•ด๋ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

์˜ค๋Š˜์€ ์—ฌ๊ธฐ๊นŒ์ง€ ์ •๋ฆฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ์ด๋งŒ ๐Ÿ‘‹๐Ÿป ๐Ÿ‘‹๐Ÿป ๐Ÿ‘‹๐Ÿป

๋ฐ˜์‘ํ˜•