【发布时间】:2015-05-30 11:40:53
【问题描述】:
我有七个并排的元素,自动布局应该计算它的宽度,父视图应该确定它的高度。在这个父视图上,我想添加一条线来更清楚地分隔区域。添加此行(具有背景颜色的 UIView)时,我在父视图(七个元素的容器)和其他视图之一的右侧看到一些黑条。
如果我不添加此行,它在 iOS 7 上可以正常工作。在 iOS 8 上,即使该行存在,它也可以工作。这些是我对该行的自动布局约束:
V:[line(==0.5)]| 和 H:|-0-[line]-0-|
这七个标签具有以下约束:
H:|-0-[first][second(==first)][third(==first)][fourth(==first)][fifth(==first)][sixt(==first)][seventh(==first)]-0-|
和
V:|[first]|
等等。
为什么 iOS 7 自动布局系统无法添加行?如何正确添加我的行?
编辑:
我的七个标签位于容器视图中 - 标题。 header 与集合视图(作为子视图控制器添加)一起放置在普通视图控制器上。这个“主”视图控制器(或容器,如果你想)有以下约束:
H:|-0-[header]-0-| - 包含七个标签的标题H:|-0-[monthView]-0-| - 集合视图H:|-0-[toolbar]-0-| - 工具栏V:|-0-[header(==15)][monthView][toolbar(==44)]-0-| - 垂直放置所有三个元素
一旦加载了所有视图,我就设法获得自动布局跟踪:
*<UIWindow:0x7897f370> - AMBIGUOUS LAYOUT
| *<UILayoutContainerView:0x78eb09f0>
| | *<UINavigationTransitionView:0x78db1b50>
| | | *<UIViewControllerWrapperView:0x78dbb400>
| | | | *<UIView:0x7897c780>
| | | | | *<MonthView_MonthViewHeader:0x78ddd600>
| | | | | | *<UILabel:0x78ddede0>
| | | | | | *<UILabel:0x78de29e0>
| | | | | | *<UILabel:0x78de2a90>
| | | | | | *<UILabel:0x78de2bc0>
| | | | | | *<UILabel:0x78de2de0>
| | | | | | *<UILabel:0x78de3140>
| | | | | | *<UILabel:0x78de3360>
| | | | | | *<UIView:0x78de3580>
| | | | | *<UICollectionViewControllerWrapperView:0x78ebdd00>
| | | | | | *<UICollectionView:0x795c1a00>
| | | | | | | *<MonthView_MonthViewCell:0x78ed1270>
| | | | | | | | <UIView:0x78d2cab0>
| | | | | | | | *<UIView:0x78d2d660>
| | | | | | | | | *<UIView:0x78d2c8b0>
| | | | | | | | | *<UILabel:0x78d2c6a0>
| | | | | | | *<MonthView_MonthViewCell:0x78d29450>
| | | | | | | | <UIView:0x78d290d0>
| | | | | | | | *<UIView:0x78d293f0>
| | | | | | | | | *<UIView:0x78d29020>
| | | | | | | | | *<UILabel:0x78d28f10>
| | | | | | | *<MonthView_MonthViewCell:0x78d27ec0>
| | | | | | | | <UIView:0x78d27c30>
| | | | | | | | *<UIView:0x78d27e60>
| | | | | | | | | *<UIView:0x78d27b80>
| | | | | | | | | *<UILabel:0x78d27a70>
| | | | | | | *<MonthView_MonthViewCell:0x78d26a20>
| | | | | | | | <UIView:0x78d26790>
| | | | | | | | *<UIView:0x78d269c0>
| | | | | | | | | *<UIView:0x78d266e0>
| | | | | | | | | *<UILabel:0x78d265d0>
| | | | | | | *<MonthView_MonthViewCell:0x78d253e0>
| | | | | | | | <UIView:0x78d25170>
| | | | | | | | *<UIView:0x78d25380>
| | | | | | | | | *<UIView:0x78d250c0>
| | | | | | | | | *<UILabel:0x78d24fb0>
| | | | | | | *<MonthView_MonthViewCell:0x78d23f60>
| | | | | | | | <UIView:0x78d23cd0>
| | | | | | | | *<UIView:0x78d23f00>
| | | | | | | | | *<UIView:0x78d23c20>
| | | | | | | | | *<UILabel:0x78d23b10>
| | | | | | | *<MonthView_MonthViewCell:0x78d1ed90>
| | | | | | | | <UIView:0x78d1eb00>
| | | | | | | | *<UIView:0x78d1ed30>
| | | | | | | | | *<UIView:0x78d1ea50>
| | | | | | | | | *<UILabel:0x78d1e940>
| | | | | | | *<MonthView_MonthViewCell:0x78d1d860>
| | | | | | | | <UIView:0x78d1d610>
| | | | | | | | *<UIView:0x78d1d800>
| | | | | | | | | *<UIView:0x78d1d560>
| | | | | | | | | *<UILabel:0x78d1d450>
| | | | | | | *<MonthView_MonthViewCell:0x78d1c3f0>
| | | | | | | | <UIView:0x78d1c160>
| | | | | | | | *<UIView:0x78d1c390>
| | | | | | | | | *<UIView:0x78d1c0b0>
| | | | | | | | | *<UILabel:0x78d1bfa0>
| | | | | | | *<MonthView_MonthViewCell:0x78d1af40>
| | | | | | | | <UIView:0x78d1acb0>
| | | | | | | | *<UIView:0x78d1aee0>
| | | | | | | | | *<UIView:0x78d1ac00>
| | | | | | | | | *<UILabel:0x78d1aaf0>
| | | | | | | *<MonthView_MonthViewCell:0x78d19a90>
| | | | | | | | <UIView:0x78d19800>
| | | | | | | | *<UIView:0x78d19a30>
| | | | | | | | | *<UIView:0x78d19750>
| | | | | | | | | *<UILabel:0x78d19640>
| | | | | | | *<MonthView_MonthViewCell:0x78d185e0>
| | | | | | | | <UIView:0x78d18350>
| | | | | | | | *<UIView:0x78d18580>
| | | | | | | | | *<UIView:0x78d182a0>
| | | | | | | | | *<UILabel:0x78d18190>
| | | | | | | *<MonthView_MonthViewCell:0x78d170c0>
| | | | | | | | <UIView:0x78d16e60>
| | | | | | | | *<UIView:0x78d17060>
| | | | | | | | | *<UIView:0x78d16db0>
| | | | | | | | | *<UILabel:0x78d16ca0>
| | | | | | | *<MonthView_MonthViewCell:0x78d15c40>
| | | | | | | | <UIView:0x78d159b0>
| | | | | | | | *<UIView:0x78d15be0>
| | | | | | | | | *<UIView:0x78d15900>
| | | | | | | | | *<UILabel:0x78d157f0>
| | | | | | | *<MonthView_MonthViewCell:0x78d14790>
| | | | | | | | <UIView:0x78d14500>
| | | | | | | | *<UIView:0x78d14730>
| | | | | | | | | *<UIView:0x78d14450>
| | | | | | | | | *<UILabel:0x78d14340>
| | | | | | | *<MonthView_MonthViewCell:0x78d132e0>
| | | | | | | | <UIView:0x78d13050>
| | | | | | | | *<UIView:0x78d13280>
| | | | | | | | | *<UIView:0x78d12fa0>
| | | | | | | | | *<UILabel:0x78d12e90>
| | | | | | | *<MonthView_MonthViewCell:0x78d11e30>
| | | | | | | | <UIView:0x78d11ba0>
| | | | | | | | *<UIView:0x78d11dd0>
| | | | | | | | | *<UIView:0x78d11af0>
| | | | | | | | | *<UILabel:0x78d119e0>
| | | | | | | *<MonthView_MonthViewCell:0x78d10980>
| | | | | | | | <UIView:0x78d106f0>
| | | | | | | | *<UIView:0x78d10920>
| | | | | | | | | *<UIView:0x78d10640>
| | | | | | | | | *<UILabel:0x78d10530>
| | | | | | | *<MonthView_MonthViewCell:0x78d0f4d0>
| | | | | | | | <UIView:0x78d0f240>
| | | | | | | | *<UIView:0x78d0f470>
| | | | | | | | | *<UIView:0x78d0f190>
| | | | | | | | | *<UILabel:0x78d0f080>
| | | | | | | *<MonthView_MonthViewCell:0x78d0e020>
| | | | | | | | <UIView:0x78d0dd90>
| | | | | | | | *<UIView:0x78d0dfc0>
| | | | | | | | | *<UIView:0x78d0dce0>
| | | | | | | | | *<UILabel:0x78d0dbd0>
| | | | | | | *<MonthView_MonthViewCell:0x78d0c960>
| | | | | | | | <UIView:0x78d0c740>
| | | | | | | | *<UIView:0x78d17190>
| | | | | | | | | *<UIView:0x78d0c690>
| | | | | | | | | *<UILabel:0x78d0c580>
| | | | | | | *<MonthView_MonthViewCell:0x78d0b520>
| | | | | | | | <UIView:0x78d0b290>
| | | | | | | | *<UIView:0x78d0b4c0>
| | | | | | | | | *<UIView:0x78d0b1e0>
| | | | | | | | | *<UILabel:0x78d0b0d0>
| | | | | | | *<MonthView_MonthViewCell:0x78d0a070>
| | | | | | | | <UIView:0x78d09de0>
| | | | | | | | *<UIView:0x78d0a010>
| | | | | | | | | *<UIView:0x78d09d30>
| | | | | | | | | *<UILabel:0x78d09c20>
| | | | | | | *<MonthView_MonthViewCell:0x78d08bc0>
| | | | | | | | <UIView:0x78d08930>
| | | | | | | | *<UIView:0x78d08b60>
| | | | | | | | | *<UIView:0x78d08880>
| | | | | | | | | *<UILabel:0x78d08770>
| | | | | | | *<MonthView_MonthViewCell:0x78d07710>
| | | | | | | | <UIView:0x78d07480>
| | | | | | | | *<UIView:0x78d076b0>
| | | | | | | | | *<UIView:0x78d073d0>
| | | | | | | | | *<UILabel:0x78d072c0>
| | | | | | | *<MonthView_MonthViewCell:0x78d06150>
| | | | | | | | <UIView:0x78d05ec0>
| | | | | | | | *<UIView:0x78d060f0>
| | | | | | | | | *<UIView:0x78d05e10>
| | | | | | | | | *<UILabel:0x78d05d00>
| | | | | | | *<MonthView_MonthViewCell:0x78d04ca0>
| | | | | | | | <UIView:0x78d04a10>
| | | | | | | | *<UIView:0x78d04c40>
| | | | | | | | | *<UIView:0x78d04960>
| | | | | | | | | *<Circle:0x78d3c6b0>
| | | | | | | | | *<UILabel:0x78d04850>
| | | | | | | *<MonthView_MonthViewCell:0x78d037f0>
| | | | | | | | <UIView:0x78d03560>
| | | | | | | | *<UIView:0x78d03790>
| | | | | | | | | *<UIView:0x78d034b0>
| | | | | | | | | *<UILabel:0x78d033a0>
| | | | | | | *<MonthView_MonthViewCell:0x78d02270>
| | | | | | | | <UIView:0x78d01fe0>
| | | | | | | | *<UIView:0x78d02210>
| | | | | | | | | *<UIView:0x78d01f30>
| | | | | | | | | *<UILabel:0x78d01e20>
| | | | | | | *<MonthView_MonthViewCell:0x78d00dc0>
| | | | | | | | <UIView:0x78d00b30>
| | | | | | | | *<UIView:0x78d00d60>
| | | | | | | | | *<UIView:0x78e64000>
| | | | | | | | | *<UILabel:0x78ed2dd0>
| | | | | | | *<MonthView_MonthViewCell:0x78ed3e60>
| | | | | | | | <UIView:0x78ed4130>
| | | | | | | | *<UIView:0x78ed3f00>
| | | | | | | | | *<UIView:0x78ed41e0>
| | | | | | | | | *<UILabel:0x78ed42a0>
| | | | | | | *<MonthView_MonthViewCell:0x78ed5310>
| | | | | | | | <UIView:0x78ed55e0>
| | | | | | | | *<UIView:0x78ed53b0>
| | | | | | | | | *<UIView:0x78ed5690>
| | | | | | | | | *<UILabel:0x78ed5750>
| | | | | | | *<MonthView_MonthViewCell:0x78ed67c0>
| | | | | | | | <UIView:0x78ed6a90>
| | | | | | | | *<UIView:0x78ed6860>
| | | | | | | | | *<UIView:0x78ed6b40>
| | | | | | | | | *<UILabel:0x78ed6c00>
| | | | | | | *<MonthView_MonthViewCell:0x78ed7eb0>
| | | | | | | | <UIView:0x78ed8180>
| | | | | | | | *<UIView:0x78ed7f50>
| | | | | | | | | *<UIView:0x78ed8230>
| | | | | | | | | *<UILabel:0x78ed82f0>
| | | | | | | *<MonthView_MonthViewCell:0x78ed9360>
| | | | | | | | <UIView:0x78ed9630>
| | | | | | | | *<UIView:0x78ed9400>
| | | | | | | | | *<UIView:0x78ed96e0>
| | | | | | | | | *<UILabel:0x78ed97a0>
| | | | | | | *<MonthView_SectionHeader:0x78edb330>
| | | | | | | | *<UIView:0x78eda940>
| | | | | | | | *<UIView:0x78edc740>
| | | | | | | | *<UIView:0x78edc7a0>
| | | | | | | | *<UIView:0x78edca50>
| | | | | | | | *<UIView:0x78edcae0>
| | | | | | | | *<UIView:0x78edcb70>
| | | | | | | | *<UIView:0x78edcc00>
| | | | | | | | *<UILabel:0x78edcc90>
| | | | | | | <UIImageView:0x78df2690>
| | | | | | | <UIImageView:0x78df1c40>
| | | | | | *<MonthView_SectionOverlay:0x78dc8fd0>
| | | | | | | *<GradientView:0x78dcc780>
| | | | | | | *<UILabel:0x78dd3ea0>
| | | | | | *<_UILayoutGuide:0x78dc8a20> - AMBIGUOUS LAYOUT
| | | | | *<MonthView_Toolbar:0x78de7540>
| | | | | | <_UIToolbarBackground:0x78de7c40>
| | | | | | | <_UIBackdropView:0x78d3e940>
| | | | | | | | <_UIBackdropEffectView:0x78d3e730>
| | | | | | | | <UIView:0x78d3e650>
| | | | | | <UIImageView:0x78de8c70>
| | | | | | <UIToolbarTextButton:0x78dfa240>
| | | | | | | <_UIToolbarNavigationButton:0x78df9aa0>
| | | | | | | | <UIButtonLabel:0x78ef69f0>
| | | | | | <UIToolbarTextButton:0x78dfaa50>
| | | | | | | <_UIToolbarNavigationButton:0x78d3eb00>
| | | | | | | | <UIButtonLabel:0x78ef5740>
| | <UINavigationBar:0x78eb1ad0>
| | | <_UINavigationBarBackground:0x78eb2170>
| | | | <_UIBackdropView:0x78db8270>
| | | | | <_UIBackdropEffectView:0x78dba8d0>
| | | | | <UIView:0x78dbb3a0>
| | | | <UIImageView:0x78eb24e0>
| | | <_UINavigationBarBackIndicatorView:0x78eb4f30>
Here可以在视图加载后找到递归描述。
【问题讨论】:
-
您是通过代码还是通过故事板设置约束?如果您选择了第一种方式,为什么不尝试在界面生成器中创建该行?
-
我没有使用故事板。全部在代码中。
-
约束是双向的。有时,视图与其子视图之间的约束可能会导致父视图的大小发生变化以满足约束。也许它很难将宽度均匀地除以七,所以它正在调整超级视图的大小。所以问题是视图对主视图有什么限制。它有
H:|[container]|约束吗? -
好的,关于编码约束我很遗憾不能帮助你:/
-
@Rob:问题是我的约束是否错误,以及大小变化的原因是什么。有趣的是,未涉及的视图也会更改其宽度(仅与父视图相关 - 视图控制器)。是的,容器有这个约束
H:|-0-[header]-0-|
标签: ios autolayout nslayoutconstraint