ios html高度自适应,iOS UILabel高度自适应终结篇
釋放雙眼,帶上耳機,聽聽看~!
網上大部分的boundingRectWithSize和sizeWithFont 計算出來的寬高在某些有特殊情況下(如鏈接中有n等等)計算出來的還是有偏差不準,此時用NSAttributedString和label的attributedText計算會迎刃而解
1.給model的.h文件添加一個NSAttributedString屬性
/**?? ?帶有屬性的(特殊文字會高亮顯示顯示表情) */
@property (nonatomic, copy) NSAttributedString *attributedText;
2..m重寫text的set方法
//重寫set
- (void)setMessageStr:(NSString *)messageStr
{
_messageStr = messageStr;
//計算出attributedText
NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:messageStr];
[attrString addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:16] range:NSMakeRange(0, messageStr.length)];
_attributedText = attrString;
}
3.cell.m文件
//用attributedText解決有時高度計算不準的bug
self.contentL.attributedText = privateLetterMyModel.attributedText;
//最終計算出來的準確的size
CGSize frame = [self.contentL.attributedText boundingRectWithSize:CGSizeMake(ScreenWidth - 120, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin context:nil].size;
4.viewController中計算cell高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
TestModel *model = self.dataArr[indexPath.row];
CGSize frame = [CalculateSize sizeForNoticeTitle:model.messageStr font:[UIFont systemFontOfSize:16] maxW:? ScreenWidth - 120];
CGSize frame = [model.attributedText boundingRectWithSize:CGSizeMake(ScreenWidth - 120, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin context:nil].size;
return frame.height ;
}
5.從服務器用mdel.text獲取數據(以為重寫了setText方法所以會自動獲取attributedText)
總結
以上是生活随笔為你收集整理的ios html高度自适应,iOS UILabel高度自适应终结篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java mysql geo_GEO数据
- 下一篇: unity game和scene效果不一