ios - 当所有 UI 元素都设置为 setTranslatesAutoresizingMaskIntoConstraints = NO 时,为什么我会看到 NSAutoresizingMaskLayoutConstraint

标签 ios objective-c autolayout ios7 ambiguous

我正在尝试调试 UI 布局,我在代码中添加的所有元素都标有 [self.element setTranslatesAutoresizingMaskIntoConstraints:NO]; XIB 文件中唯一设置的是 View 的背景颜色(选项卡式 viewController 中的许多 View 之一。

当我查看 NSLog 时,我看到以下内容:

*<UIWindow:0xc352370> - AMBIGUOUS LAYOUT
|   *<UILayoutContainerView:0xc3651b0>
|   |   *<UINavigationTransitionView:0xc355b40>
|   |   |   *<UIViewControllerWrapperView:0xbd3e250>
|   |   |   |   *<UILayoutContainerView:0xbd3da60>
|   |   |   |   |   *<UITransitionView:0xbd46ed0>
|   |   |   |   |   |   *<UIViewControllerWrapperView:0xc09a450>
|   |   |   |   |   |   |   *<UIView:0xbd51f40>
|   |   |   |   |   |   |   |   *<_UILayoutGuide:0xbd51fa0> - AMBIGUOUS LAYOUT
|   |   |   |   |   |   |   |   *<_UILayoutGuide:0xbd50a10> - AMBIGUOUS LAYOUT
|   |   |   |   |   |   |   |   *<UIButton:0xc064170> - AMBIGUOUS LAYOUT
|   |   |   |   |   |   |   |   |   *<UIButtonLabel:0xc09d640>
|   |   |   |   |   |   |   |   *<UILabel:0xc073990> - AMBIGUOUS LAYOUT
|   |   |   |   |   |   |   |   *<UIButton:0xc0576a0> - AMBIGUOUS LAYOUT
|   |   |   |   |   |   |   |   |   *<UIButtonLabel:0xc095290>
|   |   |   |   |   |   |   |   *<UIButton:0xc096640> - AMBIGUOUS LAYOUT
|   |   |   |   |   |   |   |   |   <UIButtonLabel:0xc096820>
|   |   |   |   |   |   |   |   *<UIButton:0xc098b70> - AMBIGUOUS LAYOUT
|   |   |   |   |   |   |   |   |   <UIButtonLabel:0xc098cb0>
|   |   |   |   |   |   |   |   *<UIButton:0xc09a4c0> - AMBIGUOUS LAYOUT
|   |   |   |   |   |   |   |   |   <UIButtonLabel:0xc09a6d0>
|   |   |   |   |   |   |   |   *<UILabel:0xc09c9d0> - AMBIGUOUS LAYOUT
|   |   |   |   |   |   |   |   *<UILabel:0xc09cc60> - AMBIGUOUS LAYOUT
|   |   |   |   |   |   |   |   *<UIButton:0xc09ce00> - AMBIGUOUS LAYOUT
|   |   |   |   |   |   |   |   |   <UIButtonLabel:0xc09d010>
|   |   |   |   |   |   |   |   *<UILabel:0xc0a25f0> - AMBIGUOUS LAYOUT
|   |   |   |   |   |   |   |   *<UIButton:0xc0a2800> - AMBIGUOUS LAYOUT
|   |   |   |   |   |   |   |   |   <UIButtonLabel:0xc0a2a10>
|   |   |   |   |   |   |   |   *<UILabel:0xc0a5720> - AMBIGUOUS LAYOUT
|   |   |   |   |   <UITabBar:0xc356c00>
|   |   |   |   |   |   <_UITabBarBackgroundView:0xbe28cc0>
|   |   |   |   |   |   |   <_UIBackdropView:0xbe29100>
|   |   |   |   |   |   |   |   <_UIBackdropEffectView:0xbe296e0>
|   |   |   |   |   |   |   |   <UIView:0xbe29780>
|   |   |   |   |   |   <UITabBarButton:0xbd42000>
|   |   |   |   |   |   |   <UITabBarSwappableImageView:0xbd41050>
|   |   |   |   |   |   |   <UITabBarButtonLabel:0xbd43320>
|   |   |   |   |   |   <UITabBarButton:0xbd462e0>
|   |   |   |   |   |   |   <UITabBarSwappableImageView:0xbd45d60>
|   |   |   |   |   |   |   <UITabBarButtonLabel:0xbd45c70>
|   |   |   |   |   |   <UITabBarButton:0xbd47770>
|   |   |   |   |   |   |   <UITabBarSwappableImageView:0xbd48a90>
|   |   |   |   |   |   |   <UITabBarButtonLabel:0xbd486c0>
|   |   |   |   |   |   <UITabBarButton:0xbd4c0c0>
|   |   |   |   |   |   |   <UITabBarSwappableImageView:0xbd4c220>
|   |   |   |   |   |   |   <UITabBarButtonLabel:0xbd4aea0>
|   |   |   |   |   |   <UIImageView:0xbe29ed0>
|   |   <UINavigationBar:0xc06c4a0>
|   |   |   <_UINavigationBarBackground:0xc05e720>
|   |   |   |   <_UIBackdropView:0xc357d70>
|   |   |   |   |   <_UIBackdropEffectView:0xc3639a0>
|   |   |   |   |   <UIView:0xc355470>
|   |   |   |   <UIImageView:0xc071980>
|   |   |   <UINavigationItemView:0xc074c80>
|   |   |   |   <UILabel:0xc083730>
|   |   |   <_UINavigationBarBackIndicatorView:0xc36edb0>
po [
(lldb) po [0xbd51fa0 constraintsAffectingLayoutForAxis:0]
<__NSArrayM 0xbd39190>(

)

(lldb) po [0xbd50a10 constraintsAffectingLayoutForAxis:0]
<__NSArrayM 0x1121f8f0>(

)

(lldb) po [0xc064170 constraintsAffectingLayoutForAxis:0]
<__NSArrayM 0xc0a14e0>(
<NSLayoutConstraint:0xc093aa0 H:|-(NSSpace(20))-[UIButton:0xc064170]   (Names: '|':UIView:0xbd51f40 )>,
<NSLayoutConstraint:0xc093b30 UIButton:0xc064170.width == UIButton:0xc0576a0.width>,
<NSLayoutConstraint:0xc093be0 H:[UIButton:0xc064170]-(20)-[UILabel:0xc073990]>,
<NSLayoutConstraint:0xc093c10 UILabel:0xc073990.width == UIButton:0xc0576a0.width>,
<NSLayoutConstraint:0xc096530 H:[UILabel:0xc073990]-(20)-[UIButton:0xc0576a0]>,
<NSLayoutConstraint:0xc096590 H:[UIButton:0xc0576a0]-(NSSpace(20))-|   (Names: '|':UIView:0xbd51f40 )>,
<NSAutoresizingMaskLayoutConstraint:0xc0af130 h=--& v=--& H:[UIView:0xbd51f40(768)]>
)

(lldb) po [0xc09a4c0 constraintsAffectingLayoutForAxis:0]
<__NSArrayM 0xc36a0a0>(
<NSLayoutConstraint:0xc09c9a0 H:|-(<=0)-[UIButton:0xc09a4c0]   (Names: '|':UIView:0xbd51f40 )>,
<NSContentSizeLayoutConstraint:0xc0ad530 H:[UIButton:0xc09a4c0(110)] Hug:250 CompressionResistance:750>

正如您从 po 命令中看到的,我正在获取 NSAutoresizingMasktLayoutContraints。我认为这不应该发生?

我怎样才能确保我不会得到这个?

最佳答案

好的..我发现约束没有适本地解决彼此之间的关系。我已经更新了代码,现在我可以获得所有方面的清晰约束,除了主 UIWindow,我确信这只是因为 UILayoutGuide 的问题不明确 -

*<UIWindow:0xcc6d7f0> - AMBIGUOUS LAYOUT
|   *<UILayoutContainerView:0xbd34720>
|   |   *<UINavigationTransitionView:0xbd4b140>
|   |   |   *<UIViewControllerWrapperView:0xcc48400>
|   |   |   |   *<UILayoutContainerView:0xbd5ad40>
|   |   |   |   |   *<UITransitionView:0xbd635c0>
|   |   |   |   |   |   *<UIViewControllerWrapperView:0xcca68b0>
|   |   |   |   |   |   |   *<UIView:0xcc9ddd0>
|   |   |   |   |   |   |   |   *<_UILayoutGuide:0xcc9de30> - AMBIGUOUS LAYOUT
|   |   |   |   |   |   |   |   *<_UILayoutGuide:0xcc9e090> - AMBIGUOUS LAYOUT
|   |   |   |   |   |   |   |   *<UIButton:0xcc9d910>
|   |   |   |   |   |   |   |   |   <UIImageView:0xcc9dd20>
|   |   |   |   |   |   |   |   *<UILabel:0xcc9e860>
|   |   |   |   |   |   |   |   *<UIButton:0xcc9ebb0>
|   |   |   |   |   |   |   |   |   <UIImageView:0xcc9eda0>
|   |   |   |   |   |   |   |   *<UIButton:0xcc9f020>
|   |   |   |   |   |   |   |   |   <UIButtonLabel:0xcc9f470>
|   |   |   |   |   |   |   |   *<UIButton:0xcca0620>
|   |   |   |   |   |   |   |   |   <UIButtonLabel:0xcca0830>
|   |   |   |   |   |   |   |   *<UIButton:0xcca15d0>
|   |   |   |   |   |   |   |   |   *<UIButtonLabel:0xcca17e0>
|   |   |   |   |   |   |   |   *<UILabel:0xcca2580>
|   |   |   |   |   |   |   |   *<UILabel:0xcca2710>
|   |   |   |   |   |   |   |   *<UIButton:0xcca28d0>
|   |   |   |   |   |   |   |   |   *<UIButtonLabel:0xcca2ae0>
|   |   |   |   |   |   |   |   *<UILabel:0xcca3880>
|   |   |   |   |   |   |   |   *<UILabel:0xcca3bd0>
|   |   |   |   |   |   |   |   *<UIButton:0xcca3e30>
|   |   |   |   |   |   |   |   |   *<UIButtonLabel:0xcca4040>
|   |   |   |   |   |   |   |   *<UILabel:0xcca4de0>
|   |   |   |   |   |   |   |   *<UILabel:0xcca5000>
|   |   |   |   |   <UITabBar:0xcc69e40>
|   |   |   |   |   |   <_UITabBarBackgroundView:0xcccad10>
|   |   |   |   |   |   |   <_UIBackdropView:0xcccb150>
|   |   |   |   |   |   |   |   <_UIBackdropEffectView:0xcccb730>
|   |   |   |   |   |   |   |   <UIView:0xcccb7d0>
|   |   |   |   |   |   <UITabBarButton:0xcc96bf0>
|   |   |   |   |   |   |   <UITabBarSwappableImageView:0xcc8d330>
|   |   |   |   |   |   |   <UITabBarButtonLabel:0xcc8d270>
|   |   |   |   |   |   <UITabBarButton:0xcc98830>
|   |   |   |   |   |   |   <UITabBarSwappableImageView:0xcc81840>
|   |   |   |   |   |   |   <UITabBarButtonLabel:0xcc983a0>
|   |   |   |   |   |   <UITabBarButton:0xcc9a050>
|   |   |   |   |   |   |   <UITabBarSwappableImageView:0xcc8e3e0>
|   |   |   |   |   |   |   <UITabBarButtonLabel:0xcc9a130>
|   |   |   |   |   |   <UITabBarButton:0xcc9a560>
|   |   |   |   |   |   |   <UITabBarSwappableImageView:0xcc9b140>
|   |   |   |   |   |   |   <UITabBarButtonLabel:0xcc9aa20>
|   |   |   |   |   |   <UIImageView:0xcccbf20>
|   |   <UINavigationBar:0xbd27340>
|   |   |   <_UINavigationBarBackground:0xbd2fc60>
|   |   |   |   <_UIBackdropView:0xbd43740>
|   |   |   |   |   <_UIBackdropEffectView:0xbd2c200>
|   |   |   |   |   <UIView:0xbd46100>
|   |   |   |   <UIImageView:0xbd2ffd0>
|   |   |   <UINavigationItemView:0xbd1e270>
|   |   |   |   <UILabel:0xbd283c0>
|   |   |   <_UINavigationBarBackIndicatorView:0xbd566e0>

UILayoutGuide 没有在我的代码中的任何地方设置,所以我不太确定如何处理它。

关于ios - 当所有 UI 元素都设置为 setTranslatesAutoresizingMaskIntoConstraints = NO 时,为什么我会看到 NSAutoresizingMaskLayoutConstraint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18818176/

相关文章:

ios - UITableview单元格高度根据图像问题

cocoa - 我怎样才能得到窗口的contentView到 "hug"它的 subview

iphone - 使用 javascript 或 url 检测 iPhone 上已安装的应用程序

c++ - 使用 std::string 隐式构造 NSString

ios - NSInvalidArgumentException 所需类型 = NSString;给定类型 = __NSDictionaryM;值类型 Not Acceptable : property

改变移动物体的方向....(纯物理问题)

ios - UICollectionView 在旋转时改变流向

ios - UIview 起始中心看似不正确。 (虚假视觉)

android - 如何在flutter中将Json值转换为List<String>

iphone - Facebook iOS SDK 3.5 模态提要对话框在 iPhone 中加载为空