10

UIWindow 有私有方法 _autolayoutTrace 可以帮助你找到不明确的布局。它非常好用且方便,并输出如下内容:

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

我的问题不是关于任何模棱两可的。它是关于一些视图前面的星号。它的意义是什么?

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

更新:

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

在不设置约束的情况下将 translatesAutoresizingMaskIntoConstraints 设置为 false 不会给出星号。

4

2 回答 2

9

这是-[UIView _autolayoutTrace]来自WWDC 2015 会议 #219 视频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
于 2015-07-16T19:59:27.290 回答
0

我明白你的意思,我认为*是针对可以应用自动布局的组件。我的意思是如果有按钮,那么它将显示为

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

这意味着 rectButton 是由您放置的,您可以对其应用自动布局,而其他 3 under are 将自动布局。

*仅当您的 UI 中的至少 1 个组件启用了 UIAutolayout 时才会显示,如果您的所有组件都没有 Autolayout,那么它将整个 UIView 理解为单个组件并且不会*为此显示

于 2014-02-07T11:40:47.553 回答