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

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

概述我在视图中有一个按钮.我在界面构建器中为我的按钮设置了图像. 我在界面构建器中添加到按钮的约束是: 正确的超视空间= 10 顶级空间到superview = 10 底层空间到superview> = 10 将空格留给标签> = 10 一切正常,我的布局没问题. 但是当我使用以下代码记录按钮约束时: NSLog(@"constraints for btnBack is: %@", self.btnB 我在视图中有一个按钮.我在界面构建器中为我的按钮设置了图像.
我在界面构建器中添加到按钮的约束是:

正确的超视空间= 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.

总结

以上是内存溢出为你收集整理的ios – 当我NSLog myBtn.constraints时会记录额外的约束全部内容,希望文章能够帮你解决ios – 当我NSLog myBtn.constraints时会记录额外的约束所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1077698.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存