gpt4 book ai didi

iOS:自动布局与在 iOS 7 和 iOS 8 上对 subview 应用约束的差异

转载 作者:行者123 更新时间:2023-11-29 12:26:49 24 4
gpt4 key购买 nike

我在 Storyboard中设置了一个 View Controller 。 View Controller 的 View 包含一个 subview (UITableView),其边缘固定到其父级的 4 个边,实质上使 View 填充其父级。

我将 View Controller 的主视图添加为另一个 View Controller 的 View 的 subview ,如下所示:

UIView *overlayView = firstViewController.view;

[overlayView setTranslatesAutoresizingMaskIntoConstraints:NO];

UIView *sourceView = secondViewController.view;

[sourceView addSubview:overlayView];


NSLayoutConstraint *constraint;

constraint = [NSLayoutConstraint constraintWithItem:overlayView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:sourceView attribute:NSLayoutAttributeLeading multiplier:1.0 constant:0];

[sourceView addConstraint:constraint];

constraint = [NSLayoutConstraint constraintWithItem:sourceView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:overlayView attribute:NSLayoutAttributeTrailing multiplier:1.0 constant:100];

[sourceView addConstraint:constraint];

constraint = [NSLayoutConstraint constraintWithItem:overlayView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:sourceView attribute:NSLayoutAttributeTop multiplier:1.0 constant:0];

[sourceView addConstraint:constraint];

constraint = [NSLayoutConstraint constraintWithItem:overlayView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:sourceView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0];

[sourceView addConstraint:constraint];

[sourceView layoutIfNeeded];

我希望从 View 的右边缘到其父级的间隙等于 100 像素。

现在很奇怪,这在 iOS 8 上按预期工作,但在 iOS 7 上却失败了,并且 View 全屏显示,忽略了尾随约束上设置的 100 常量。此外,如果要添加的 View Controller 的 View 没有 subview - 那么它会按预期工作。 setTranslatesAutoresizingMaskIntoConstraints: 是否应用于 iOS 7 中一个 View 的所有 subview ?这可能是什么原因?

编辑:

问题在于操作系统管理 subview 的方式。

enter image description here

当 Container View 被设置为 View Controller 的 view 属性的导出时,事情就不起作用了。但是,如果我将 Table View 设置为 view 属性的导出,它就可以工作。如果有一个 subview 将边缘固定到其父 View ,然后我将其他约束添加到父 View ,则会发生一些奇怪的事情。我不明白为什么它在 iOS 8 上运行良好...

编辑 2

问题似乎只发生在 trailing 约束条件下。如果我想修改任何其他约束的常量,没有问题?!

最佳答案

您可以尝试在您的约束中将 sourceViewoverlayView 互换吗?

 `constraint = [NSLayoutConstraint constraintWithItem:sourceView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:overlayView attribute:NSLayoutAttributeTrailing multiplier:1.0 constant:100];`

这实际上意味着 sourceView.trailing - 100 = overlayView.trailing; 这不是您想要的。

编辑 1:setTranslatesAutoresizingMaskIntoConstraints: 是否应用于 iOS 7 中一个 View 的所有 subview ?

没有。 translatesAutoresizingMaskIntoConstraints 仅为您显式调用 setTranslatesAutoresizingMaskIntoConstraints 的 View 设置。

关于iOS:自动布局与在 iOS 7 和 iOS 8 上对 subview 应用约束的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28828757/

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