teunteun2
[Swift] Extension NSMutableAttributedString 본문
사실 밑의 링크가 2편이고 해당 콘텐츠가 1편입니다. 더 뒤늦게 올리네용
https://teunteun2.tistory.com/10
인스타그램 클론코딩을 하면서 최대한 디테일한 부분까지 신경쓰려고 노력했는데 그 부분 중 하나가 게시물 content 부분인 것 같다. UserName과 Content 부분이 분명 하나의 Label인데 굵기도 다르고 심지어 어딜 누르냐에 따라 뷰 이동이 다르다.
- 우선 하나의 Label로 만든 후 유저아이디와 콘텐츠 부분의 굵기를 다르게 해주기 위해 extension으로 메서드를 만들었다.
string.append -> NSAttributedString을 추가할 수 있다. 영역 지정 X
string.setAttributes -> 추가된 NSAttributedString 내에서 range에 따라 attributes를 다르게 설정할 수 있다
extension NSMutableAttributedString {
func changeWeight(to weight: UIFont.Weight, content: String, targetString: String, size: CGFloat = 12) -> NSMutableAttributedString{
let font = UIFont.systemFont(ofSize: size, weight: weight)
self.append(
NSAttributedString(string: content,attributes: [.font: UIFont.systemFont(ofSize: size, weight: .regular)])
)
let attributes: [NSAttributedString.Key: Any] = [.font: font]
self.setAttributes(attributes, range: (string as NSString).range(of: targetString))
return self
}
}
- fullContent 는 유저아이디와 콘텐츠를 합친 String
fullContent = "\(postData.name) \(postData.content)"
- fullContent willSet 정의
var fullContent: String = "" {
willSet {
contentLabel.attributedText = NSMutableAttributedString()
.changeWeight(to: .medium, content: newValue, targetString: postUserName)
}
}
'iOS' 카테고리의 다른 글
[Swift] ReactorKit (0) | 2022.05.10 |
---|---|
[Swift] Collection View Cell 내부의 Button Action (tag & delegate & closure 차이점) 코드X (0) | 2022.05.10 |
[Swift] XIB를 이용한 커스텀 뷰 만들 때 - required init?(coder:NSCoder) & awakeFromNib() 의 호출 시점 (0) | 2022.05.07 |
[Swift] GestureRecognizer&TextKit 으로 UILabel text 클릭 이벤트 발생시키기 (0) | 2022.04.23 |
[RxSwift] CollectionView in TableView Cell 만들기 (0) | 2022.04.18 |