为什么在访问titleLabel属性时UIButton会resize?

我正在尝试将按钮的大小调整为(它的内在大小+更多一点)以绘制自定义背景。 但是,每次我在按钮内访问self.titleLabel时,大小和位置都会重新转换为故事板的大小和位置。 我不需要对标签做任何事情来重现这个,只需从按钮中检索它。

我已将记录代码放在我的按钮和视图控制器上,以便找到发生的位置。 它不是来自子视图的中继或我在视图控制器中看到的任何其他通知。 访问titleLabel之前的行,位置和大小都是正确的。 之后,它重新回到故事板位置。 注释掉访问可以防止大小/位置捕捉。 有人能告诉我这种情况发生的地点或原因吗?

我没有设置约束(我可以告诉),但我在这里反对自动布局吗? 我应该采用不同的方式来组合控件或其他东西吗?

在UIButton修改标题标签似乎改变了它的框架并且UIButton titleLabel在印刷机上重新resize之前曾经问过类似(或相同?)的东西吗? ,但两者都没有得到答复,或只是“可能是一个错误”解释了。

如果项目启用了自动布局,那么YES,您正在进行自动布局。 您有两个选择,子类UIButton,以便您可以覆盖内在大小计算,或修改约束,以便在任何约束中不使用内在大小。 如果执行后者,则可能需要为宽度约束创建IBOutlet,以便可以根据需要调整constant属性。

这不是一个错误,它是自动布局的结果。 使用自动布局时,不应设置任何帧。 相反,您应该通过修改约束来更改大小或位置。 发生的事情是,无论何时需要重绘视图,帧都会恢复到由约束定义的帧。