一般来说, 当设置好label 的行数以后 使用sizeToFit, label的frame会自动适应内容多少, 然而, 还有一个初学者会经常犯的错误使label 的sizeToFit失效, 在平常的情况下, 我们在初始化label 的时候就会给它一个frame, 那样, 在之后使用sizeToFit, label 就会自适应, 但当你在
layoutSubviews 中, 给label付frame的话, 那么问题就会来了, 因为如文档
// override point. called by layoutIfNeeded automatically. As of iOS 6.0, when constraints-based layout is used the base implementation applies the constraints-based layout, otherwise it does nothing.
每次你给label一个frame的时候, 就会走layoutSubviews 这个方法, 然而你在这里重新给label属性的话, 那么label就会出现如失效一样的事情, 所以如果你打算在这里给空间加属性的话, 在外面改变时候起冲突的。
如题这个问题有多种解决办法, 楼主暂时提供两种:
1. 在你set属性的时候给label.text, 然后再layoutSubviews里面 1⃣️设置frame 2⃣️然后控制行数numberOfLines = 0 (代表多行) 3⃣️sizeToFit, ok, 你试一下应该, 一切都是按逻辑走的
2. 不要使用layoutSubviews, 好吧, 这种方法相当于没说, 就是在你的set属性方法里面, 走1的三步, 就ok了
有时候的问题, 只要你搞懂程序的执行顺序, 问题就会迎刃而解的
希望大家多批评, 共同进步, 一个不想被互联网淘汰的程序员