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

      我是一个iOS开发。最近偏爱使用UIButton控件。

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

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

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

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值