[英]iOS autolayout vs ScrollView : Contentsize issue
我需要的
我有一个具有以下层次结构的scrollView:
滚动型
。 ^ contentView(UIView)
。 -^ view1(黄色)
。 -^ view2(灰色)
view1
(黄色)具有固定的高度,并固定在contentView的顶部。 我已经指定了除高度view2
以外的所有约束。 因为我正在以编程方式向view2
(灰色)添加一个子视图,并且高度将是随机的。
问题是我对如何设置view2
的高度约束感到view2
。 scrollview需要具有从上到下的约束,以便计算contentSize
。 但是view2
的高度只有在添加子视图之后才是固定的,这当然会具有确定高度的所有必要约束。
我尝试了什么
1)我的第一个计划是添加子视图并以编程方式设置其约束以使滚动视图满意。 像这样:
detailsView = [ProfileDetailsView instantiateFromNib];
[self.detailHolder addSubview:detailsView];
[self.detailHolder addConstraint:[NSLayoutConstraint constraintWithItem:detailsView
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:self.detailHolder
attribute:NSLayoutAttributeTop
multiplier:1.0
constant:0.0]];
[self.detailHolder addConstraint:[NSLayoutConstraint constraintWithItem:detailsView
attribute:NSLayoutAttributeLeading
relatedBy:NSLayoutRelationEqual
toItem:self.detailHolder
attribute:NSLayoutAttributeLeading
multiplier:1.0
constant:0.0]];
[self.detailHolder addConstraint:[NSLayoutConstraint constraintWithItem:detailsView
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:self.detailHolder
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:0.0]];
[self.detailHolder addConstraint:[NSLayoutConstraint constraintWithItem:detailsView
attribute:NSLayoutAttributeTrailing
relatedBy:NSLayoutRelationEqual
toItem:self.detailHolder
attribute:NSLayoutAttributeTrailing
multiplier:1.0
constant:0.0]];
问题是xcode给我一个错误,即ScrollView has ambiguous scrollable content height
。 我无法为view2
设置固定的高度,因为稍后要添加的子视图将具有设置ScrollView
的contentSize的所有必要约束。
2)然后,我尝试以较低的优先级向view2
添加一个高度约束,以便当子视图约束启动时,高度约束将被覆盖。 但这出于某种原因似乎不起作用。
我建议您向view2添加高度约束,并将IBOutlet链接到高度约束。
如
@property (strong, nonatomic) IBOutlet NSLayoutConstraint *heightConstraint;
然后,在以编程方式为view2的子视图添加约束之前,使用以下命令从view2删除高度约束:
[view2 removeConstraint:self.heightConstraint];
然后以编程方式添加您的约束。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.