ios – 当我NSLog myBtn.constraints时会记录额外的约束

我在视图中有一个按钮.我在界面构建器中为我的按钮设置了图像.
我在界面构建器中添加到按钮的约束是:

正确的超视空间= 10

顶级空间到superview = 10

底层空间到superview> = 10

将空格留给标签> = 10

一切正常,我的布局没问题.
但是当我使用以下代码记录按钮约束时:

NSLog(@"constraints for btnBack is: %@",self.btnBack.constraints);

控制台日志:

constraints for btnBack is:(

"<NSContentSizeLayoutConstraint:0x7c35c400 H:[UIButton:0x7c3588a0(102)] Hug:250 CompressionResistance:750>"

"<NSContentSizeLayoutConstraint:0x7c35c450 V:[UIButton:0x7c3588a0(92)] Hug:250 CompressionResistance:750>")

我知道顶部和左右和底部约束不应该在这里记录,因为它们是超视图约束而不是按钮约束.
在这里我没有添加任何宽度和高度约束到我的按钮(即使在代码中).

为什么在控制台中记录约束高度和宽度?

解决方法

如果视图具有基于其内容的自然宽度,则将该宽度作为intrinsicContentSize.width返回.否则,它将intrinsicContentSize.width设置为UIViewNoIntrinsicmetric.

同样,如果它具有自然高度,则将该宽度作为intrinsicContentSize.height返回.否则,它将intrinsicContentSize.height设置为UIViewNoIntrinsicmetric.

按钮具有自然尺寸(宽度和高度),由其标题,字体,图像和其他细节决定.因此,其intrinsicContentSize.width和intrinsicContentSize.height都是有效的大小,而不是UIViewNoIntrinsicmetric.

当intrinsicContentSize.width!= UIViewNoIntrinsicmetric时,auto layout会在视图上安装NSContentSizeLayoutConstraint类型的特殊约束.类似地,当intrinsicContentSize.height!= UIViewNoIntrinsicmetric时,auto layout会在视图上安装NSContentSizeLayoutConstraint.

有关这些特殊约束的详细信息,请参阅this answer.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...