[[UIWindow keyWindow] _autolayoutTrace]输出中Asterisk(*)的含义是什么?

时间:2013-08-29 23:14:24

标签: iphone ios objective-c iphone-privateapi

UIWindow有私有方法_autolayoutTrace,可以帮助您找到暧昧的布局。这非常好,方便,输出如下:

*<UIWindow:0x13436fd0> - AMBIGUOUS LAYOUT
|   *<UIView:0xd5e0b30>
|   |   *<PbJellyContentContainerView:0xd5e0ff0>
|   |   |   *<UIView:0x20710ee0>
|   |   |   |   *<PbMapContainerView:0x20710c90>
|   |   |   |   |   <MKMapView:0x2070df70>
|   |   |   |   |   |   <UIView:0xd1cca20>
|   |   |   |   |   |   |   <MKBasicMapView:0xd1cd020>
....

我的问题不是任何含糊不清的问题。它是关于某些观点前面的星号。它的含义是什么?

我的猜测是它会标记所有使用自动布局的视图。但是系统如何确定这个?

更新

星号似乎标记了至少有一个约束集或者具有至少有一个约束集的子视图的所有视图。

将translatesAutoresizingMaskIntoConstraints设置为false而不设置约束不会给出星号。

2 个答案:

答案 0 :(得分:8)

这是-[UIView _autolayoutTrace]来自WWDC 2015 session #219 video 31:00

的图例
* - is laid out with auto layout
+ - is laid out manually, but is represented in the layout engine because translatesAutoresizingMaskIntoConstraints = YES
• - layout engine host

答案 1 :(得分:0)

我明白了,我想是的,*适用于您可以应用Autolayout的组件。 我的意思是,如果有按钮,那么它将显示为

*<UIRoundedRectButton:0x1f053a50>
|   |   |   <UIGroupTableViewCellBackground:0x1f053b20>
|   |   |   <UIImageView:0x1f0542f0>
|   |   |   <UIButtonLabel:0x1f053db0>

这意味着你提出了rectButton,你可以对其应用自动布局,而其他3个自动布局将自动布局。

仅当您的UI中的至少1个组件具有UIAutolayout ON时才会显示

*,如果您的所有组件都没有Autolayout,那么它将整个UIView理解为单个组件,并且不会显示*