您的位置:首页 > 产品设计 > UI/UE

设置UIButton最多显示几行《二》

2016-07-04 10:35 543 查看
我是一个iOS开发。最近偏爱使用UIButton控件。

第一篇《用UIButton做出cell的点击效果》提到的需求为:“界面的某些内容点击出现背景色,触发点击事件,点击后背景色消失”,加上附加需求“内容最多展示三行,大于三行的,在三行末尾,显示...”,且需求上标出了行距。

当遇见此类需求,可能,不会青睐UIButton,选择自己封装UILabel,或第三方的来实现。我下面给出我的一种思路,用UIButton实现,抱砖引玉啦。

我觉得难点有两个,难点一个是,“...”显示在末位。因为我之前只是惯用语UIButton的部分常用属性,所见到的“...”都是放在中间的。开始自我设计了一些方案,能够实现,但都不能准确定位三行的末尾。原因是内容可能是汉子,字符串,数字等的不同组合。后来找到了UIButton的titleLabel的lineBreakMode设置为NSLineBreakByTruncatingTail,轻松搞定了。

难点二是,当内容很多时,如何准确的算出三行高度。借用了第三方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.numberOfLines为3。

需要注意的是,lineBreakMode在计算高度时,值为:NSLineBreakByWordWrapping。在UIButton上显示时,值为:

NSLineBreakByTruncatingTail。在加载富文本字符串时,需要设置UIButton的titleLabel.numberOfLines。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: