繁体   English   中英

iOS自动布局与ScrollView:Contentsize问题

[英]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一个占位符大小,该大小将在运行时自动删除,以使自动布局系统满意

在此处输入图片说明

我建议您向view2添加高度约束,并将IBOutlet链接到高度约束。

 @property (strong, nonatomic) IBOutlet NSLayoutConstraint *heightConstraint;

然后,在以编程方式为view2的子视图添加约束之前,使用以下命令从view2删除高度约束:

 [view2 removeConstraint:self.heightConstraint];

然后以编程方式添加您的约束。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM