基于子视图的AutoLayout高度

时间:2013-12-30 14:54:01

标签: ios uiscrollview autolayout

我尝试了很多解决方案,但无法通过它的子视图来调整UIScrollView的大小。

错误:

(
    "<NSLayoutConstraint:0x16e71240 V:[RouteView:0x16d76fd0]-(10)-[RouteView:0x16e6fbb0]>",
    "<NSLayoutConstraint:0x16e71270 V:[RouteView:0x16e6fbb0(150)]>",
    "<NSLayoutConstraint:0x16d78710 V:[RouteView:0x16e6fbb0]-(10)-[RouteView:0x16e702c0]>",
    "<NSLayoutConstraint:0x16e71190 V:[RouteView:0x16e702c0(150)]>",
    "<NSLayoutConstraint:0x16d78810 V:[RouteView:0x16e702c0]-(10)-[RouteView:0x16e70700]>",
    "<NSLayoutConstraint:0x16e713e0 V:[RouteView:0x16e70700(150)]>",
    "<NSLayoutConstraint:0x16d78900 V:[RouteView:0x16e70700]-(0)-|   (Names: '|':UIView:0x16e6da80 )>",
    "<NSLayoutConstraint:0x16e71030 V:[UIView:0x16e6da80]-(10)-[RouteView:0x16d76fd0]>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x16d78810 V:[RouteView:0x16e702c0]-(10)-[RouteView:0x16e70700]>

我的等级:

Class UIView contains
--UIScrollView
  --mainViewOfScroller
  ----10-----------10
  ----|------------|
  ----UIView-10-UIView
  ----|------------|
  ----10-----------10
  ----|------------|
  ----UIView-10-UIView
  ……… 

我做了什么:

1。对于scroller(UIScrollView)的所有子视图,我设置了translatesAutoresizingMaskIntoConstraints = NO

2。将卷轴高度设置为自我的宽度和高度的最大值(自我是类UIView,它是主要的UIView)

[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scroller]|" options:0 metrics: 0 views:views]];
  [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scroller]|" options:0 metrics: 0 views:views]];

3。将mainViewOfScroller设置为max by width(而不是按高度调整大小)

[scroller addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|     [mainViewOfScroller(==scroller)]|" options:0 metrics:0 views:views]];

4。然后我想将mainViewOfScroller的底部固定为mainViewOfScroller.subviews.lastObject的底部

[scroller addConstraint:[NSLayoutConstraint constraintWithItem:mainViewOfScroller attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:mainViewOfScroller.subviews.lastObject attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0]];

1 个答案:

答案 0 :(得分:1)

在这样的滚动视图中使用自动布局时,需要对其进行设置,以使其中的每个视图都扩展其父视图。由于其contentSize,滚动视图的工作方式略有不同。这是在苹果开发人员论坛上提出的,我做了一个示例项目,展示了所使用的约束。它使用的是故事板,但我认为它可以帮助你。

https://github.com/ketzusaka/ScrollingWithConstraints

此处的目标是让第一级子视图能够展开滚动视图。例如,如果滚动视图中有两个子视图,则希望顶部视图在其超级视图的左侧,顶部和右侧具有约束。底部应该对其超视图的左侧,底部和右侧有约束。然后他们应该彼此相关,这样他们就会“堆叠”在一起。最后,您需要确保它们中的每一个都具有一定的大小以使它们扩展,可能是内在的内容大小调整或更多约束。我不会有任何子视图说他们的宽度与滚动视图有关;只有将它们固定到边缘并让子视图驱动滚动视图的大小。

Apple也有一份技术文件:

https://developer.apple.com/library/ios/technotes/tn2154/_index.html

最后,这是苹果开发论坛的帖子:

https://devforums.apple.com/message/917077#917077

祝你好运!