gpt4 book ai didi

ios - Superview 不会根据 subview 约束增加高度

转载 作者:行者123 更新时间:2023-11-29 01:48:14 26 4
gpt4 key购买 nike

我有一个 ScrollView 和一个单独的 UIView,我在其中放置了一系列带有约束的文本字段和标签,它们完全占据了顶部和底部。我试图根据其 subview 约束调整 UIView 的高度,但它不会。发生的情况是 View 保持其高度并强制其他文本字段折叠或收缩,从而打破约束。

详细信息

  1. 每个 subview 的优先级值:压缩= 750拥抱=250
  2. UIView 优先级值:压缩= 249拥抱 = 749 设置为低于其他。
  3. 大多数文本字段都有宽高比限制。这会导致字段进行调整。
  4. 每个 subview 之间都有垂直/顶部/底部间距。顶部和底部元素对 View 也有顶部和底部约束。

我的代码是什么:

-(void)viewDidLayoutSubviews{
[super viewDidLayoutSubviews];
/* I had to adjust the UIView's width to fill the entire self.view.*/
if(![contentView isDescendantOfView:detailsScrollView]){
CGRect r = contentView.frame;
r.size.width = self.view.frame.size.width;
contentView.frame = r;
[detailsScrollView addSubview:contentView];
}
}

屏幕截图

景色

enter image description here

这就是目前正在发生的情况。在这种情况下,它会强制电子邮件字段缩小。如果我在其上放置高度值,它不会缩小,但布局引擎会找到另一个要破坏的元素 enter image description here

编辑:

已解决

也许我只是需要休息一下,恢复一下精神。我之前确实尝试过使用约束,但没有成功。然而,多亏了这个建议,我回去设置约束,而不是在这个框架上设置框架,并最终让它工作。

解决方案:

-(void)viewDidLoad{
[detailsScrollView addSubview:contentView];

[contentView setTranslatesAutoresizingMaskIntoConstraints:NO];
[detailsScrollView setTranslatesAutoresizingMaskIntoConstraints:NO];
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(contentView,detailsScrollView);
NSArray *horizontalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[contentView]-0-|"
options:NSLayoutFormatDirectionLeadingToTrailing metrics:nil
views:viewsDictionary];
NSArray *verticalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[contentView]-0-|"
options:NSLayoutFormatDirectionLeadingToTrailing
metrics:nil
views:viewsDictionary];
NSArray *widthConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[contentView(==detailsScrollView)]-0-|" options:0 metrics:nil views:viewsDictionary];

}

最佳答案

当您使用界面生成器处理 UIScrollView 及其子 UIView 时。通常在 UIScrollView 及其子项(在您的情况下为 contentView)之间设置顶部、底部、左侧和等宽约束。

如果没有这些限制,另一个选项是设置 UIScrollView 的内容大小。这是在引入约束之前使用 UIScrollView 的方式。

So, 1. you should add those constraints programmatically.

通过使用约束,不再需要 View 框架来调整 View 大小。

So, 2. remove frame setting for your content view.

我对您在 viewDidLayoutMethod 中设置框架的方式不太满意。如果我要在这里这样做,我会从 if 语句 中取出框架设置。

没有if语句的代码如下:

[detailsScrollView addSubview:contentView];

// then set the constraints here after adding the subview.

将此代码放在任何地方,但不要放在您的 viewDidLayoutSubviews 方法中。这将是一个比在 if 语句中设置框架更大的问题。

Note: Originally, if you are going to set frame in the viewDidLayoutSubviews method. you should do it for all cases. for example for the if case and the else case. because, next time this method is going to be called the views will respond to the constraint. and lose its frame.

另一个观察:如果你想让 View 响应它的 subview 约束,为什么你需要为它设置框架?对吧?

添加约束后,您可能需要调用方法 constraintNeedsUpdate 或其他相关方法。

关于ios - Superview 不会根据 subview 约束增加高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31677617/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com