iOS/Swift

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

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

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

 

์˜ค๋Š˜์€ ์ฑ„ํŒ… UI๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์ ์–ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค : )

 

๋ช‡ ๊ฐœ์˜ ํฌ์ŠคํŒ…์ด ๋ ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ผ๋‹จ ์‹œ์ž‘ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์ฑ„ํŒ… ์˜์ƒ
ezgif com-gif-maker

 

์ œ๊ฐ€ ๊ตฌํ˜„ํ•œ ์ฑ„ํŒ… UI๋Š” ์œ„์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

TableView์™€ TableViewCell

TableView

- ์ฑ„ํŒ… UI๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๋‹ค ๋ณด๋ฉด ๊ฐ„ํ˜น CollectionView๋ฅผ ์ด์šฉํ•˜์‹  ๋ถ„๋“ค๋„ ๊ณ„์‹œ๋˜๋ฐ ์ €๋Š” TableView๋ฅผ ํ™œ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

TableVIewCell

- ๊ฐ™์€ Cell์„ ์ด์šฉํ•ด ๊ตฌํ˜„ํ•˜์‹  ๋ถ„๋“ค๋„ ์žˆ์—ˆ๋Š”๋ฐ ์ €์˜ ๊ฒฝ์šฐ์—๋Š” ์ž์‹ ์ด ๋ณด๋‚ด๋Š” ์ฑ„ํŒ…๊ณผ ์ƒ๋Œ€๊ฐ€ ๋ณด๋‚ด๋Š” ์ฑ„ํŒ… ๋‘ ๊ฐ€์ง€์˜ TableViewCell์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” TableViewCell์„ ๋งŒ๋“ค๊ณ  TableView์— ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์ ์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

1. TableViewCell์„ ๋งŒ๋“ค์ž

 

๊ณตํ†ต์‚ฌํ•ญ : ํ…์ŠคํŠธ๋ฅผ ๋ณด๋‚ด๊ณ  ๋ฐ›์„ ๋•Œ ๋ณด์—ฌ์ค„ ํ…์ŠคํŠธ๋ทฐ๋ฅผ ๋งŒ๋“ค์–ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜์ƒ์—์„œ ๋ณด์•˜๋“ฏ์ด ์‹œ๊ฐ„์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด UILable์„ ์ถ”๊ฐ€์ ์œผ๋กœ ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค.

 

(1) ๋‚ด๊ฐ€ ๋ณด๋‚ผ ๋•Œ ์‚ฌ์šฉํ•  Cell 

// ๋‚ด๊ฐ€ ๋ณด๋‚ผ ๋•Œ ์‚ฌ์šฉํ•  Cell
class ChattingViewMyCell: UITableViewCell {

    //identifier ๋ณ€์ˆ˜ ๋งŒ๋“ค์–ด์ฃผ๊ธฐ!
    static let identifier = "ChattingViewCell"
    
    // ์ฑ„ํŒ…๋‚ด์šฉ์ด ๋“ค์–ด๊ฐˆ ํ…์ŠคํŠธ๋ทฐ๋ฅผ ๋งŒ๋“ค์–ด์ค์‹œ๋‹ค
    let messageBox = UITextView().then {
        $0.isScrollEnabled = false // ์Šคํฌ๋กค์€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
        $0.isEditable = false // ์ˆ˜์ •ํ•  ์ˆ˜๋„ ์—†๊ตฌ์š”!
        $0.backgroundColor = R.color.brandWhitegreen()!
        $0.textContainerInset = UIEdgeInsets(top: 5, left: 5, bottom: 5, right: 5) 
        $0.layer.cornerRadius = 10
        $0.font = .toBodyR14
        // ํ…์ŠคํŠธ ๊ธธ์ด์— ๋งž๊ฒŒ ์‚ฌ์ด์ฆˆ๋ฅผ ๋งž์ถฐ์ค๋‹ˆ๋‹ค
        $0.sizeToFit()
    }
    
    let date = UILabel().then {
        $0.numberOfLines = 0
        $0.backgroundColor = .clear
        $0.textColor = R.color.gray7()!
        $0.font = .toBodyR12
    }
}

 

์ด๋•Œ, trailingConstraint์™€ width๊ฐ’์„ ์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

sizeToFit ๋ฉ”์„œ๋“œ๋กœ ์ธํ•ด ๋†’์ด๋Š” ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ •ํ•ด์ง€๋‹ˆ ์ตœ์†Œ 45 ์ด์ƒ์œผ๋กœ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)

    // ์„ ํƒ์‹œ ์Šคํƒ€์ผ์€ ์—†์–ด์•ผ๊ฒ ์ฃ !
    selectionStyle = .none

    contentView.addSubview(messageBox)
    contentView.addSubview(date)

    messageBox.snp.makeConstraints { make in
        // ๋‚ด๊ฐ€ ๋ณด๋‚ด๋Š” ์…€์˜ ๊ฒฝ์šฐ ์šฐ์ธก์— ๋ถ™์–ด์žˆ์–ด์•ผํ•˜๊ธฐ์— trailing๊ณผ width๊ฐ’์„ ์ฃผ๋ฉด๋ฉ๋‹ˆ๋‹ค.
        make.trailing.equalToSuperview().inset(15)
        make.top.bottom.equalToSuperview()
        make.height.greaterThanOrEqualTo(45)
        make.width.lessThanOrEqualTo(255)
        make.centerY.equalToSuperview()
    }

    date.snp.makeConstraints { make in
        make.trailing.equalTo(messageBox.snp.leading).offset(-5)
        make.bottom.equalTo(messageBox.snp.bottom)
    }
}

 

(2) ๋ฐ›์€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด์—ฌ์ค„ ๋•Œ ์‚ฌ์šฉํ•  Cell

์œ„์™€ ์ฝ”๋“œ์ƒ์œผ๋กœ๋Š” ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋งŒ ๋ ˆ์ด์•„์›ƒ์€ ๋ฐ˜๋Œ€๋กœ ์กฐ์ •์ด ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด์˜ trailling์„ leading์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

2. TableView์— ์ ์šฉํ•ด ๋ณด์ž

 override func viewDidLoad() {
    super.viewDidLoad()

    tableView.delegate = self
    tableView.dataSource = self
    
    // ๋‘ Cell์„ ๋ชจ๋‘ ๋“ฑ๋ก
    tableView.register(ChattingViewMyCell.self, forCellReuseIdentifier: ChattingViewMyCell.identifier)
    tableView.register(ChattingViewYourCell.self, forCellReuseIdentifier: ChattingViewYourCell.identifier)
    tableView.rowHeight = UITableView.automaticDimension
        
}

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ‰์†Œ ๊ตฌํ˜„ํ•˜์…จ๋˜ TableView์™€ TableViewCell์ด ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

๋‹ค๋งŒ

(1) ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ, ์ˆœ์„œ๋Œ€๋กœ ํ…Œ์ด๋ธ” ๋ทฐ์— ์Œ“์ด๊ฒŒ ๋˜๋ฉด ๊ฐ€์žฅ ์ตœ๊ทผ์— ๋ณด๋‚ธ ๊ฒƒ์ด ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ฐ€๊ฒŒ ๋˜๊ณ 

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

 

 

์œ„์˜ ๋‘ ๊ฐ€์ง€๋Š” ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ ์ง„ํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

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

 

[ ๋‹ค์Œ ํฌ์ŠคํŒ… ]

 

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

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

pooh-footprints.tistory.com

 

๋ฐ˜์‘ํ˜•