設定UIButton最多顯示幾行《二》
我是一個iOS開發。最近偏愛使用UIButton控制元件。
第一篇《用UIButton做出cell的點選效果》提到的需求為:“介面的某些內容點擊出現背景色,觸發點選事件,點選後背景色消失”,加上附加需求“內容最多展示三行,大於三行的,在三行末尾,顯示...”,且需求上標出了行距。
當遇見此類需求,可能,不會青睞UIButton,選擇自己封裝UILabel,或第三方的來實現。我下面給出我的一種思路,用UIButton實現,抱磚引玉啦。
我覺得難點有兩個,難點一個是,“...”顯示在末位。因為我之前只是慣用語UIButton的部分常用屬性,所見到的“...”都是放在中間的。開始自我設計了一些方案,能夠實現,但都不能準確定位三行的末尾。原因是內容可能是漢子,字串,數字等的不同組合。後來找到了UIButton
難點二是,當內容很多時,如何準確的算出三行高度。借用了第三方TTTAttributedLabel中方法:
//第一個引數,是將要計算高度的富文字字串。第二個引數是,允許的最大size。第三個引數是,允許的最大行數
+ (CGSize)sizeThatFitsAttributedString:(NSAttributedString *)attributedString
withConstraints:(CGSize)size
limitedToNumberOfLines:(NSUInteger)numberOfLines
從方法的引數入手,需要先建立富文字字串。通過設定NSMutableParagraphStyle物件,設定字號,字型,行距,和lineBreakMode,建立特定格式的富文字字串。在傳入上述方法中。設定第三個引數為3和size引數,即可得到制定行數的高度。
用- (void)setAttributedTitle:(nullable NSAttributedString *)title forState:(UIControlState)state方法,來載入富文字字串,並設定UIButton的titleLabel
需要注意的是,lineBreakMode在計算高度時,值為:NSLineBreakByWordWrapping。在UIButton上顯示時,值為:
NSLineBreakByTruncatingTail。在載入富文字字串時,需要設定UIButton的titleLabel.numberOfLines。