【发布时间】:2023-03-04 11:06:01
【问题描述】:
我需要什么
我有一个具有以下层次结构的滚动视图:
滚动视图
. ^ 内容视图(UIView)
. - ^ view1(黄色)
. - ^ view2(灰色)
view1(Yellow) 有一个固定的高度并固定在 contentView 的顶部。我已经指定了除高度view2 之外的所有约束。因为我正在以编程方式向view2(gray) 添加一个子视图,并且高度随机。
问题是我不知道如何设置view2的高度约束。为了计算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 添加一个具有较低优先级的高度约束,以便当子视图约束启动时,高度约束将被覆盖。但由于某种原因,这似乎不起作用。
【问题讨论】:
标签: ios objective-c uiscrollview autolayout