gpt4 book ai didi

ios - NSLayoutConstraint layout_Margin 从 iOS 7 到 iOS 8 的变化

转载 作者:行者123 更新时间:2023-11-28 21:53:34 25 4
gpt4 key购买 nike

我正在尝试在带有约束的 scrollView 中添加一个 View 。一切正常,但我不知道为什么,我的上层约束之一就是没有按照我的意愿行事。

我的白色方 block 应该位于红色 super View 的顶部,而我的 super View 位于 UIScrollView 内。但是我的红色 super View 和 IOS7 上的白色方 block 之间有 8 点的神奇差距......这不是我的 Storyboard中的内容。

enter image description here

以及我在代码中放入的内容。 Self 是一个 UIscrollview。

 viewFromController.translatesAutoresizingMaskIntoConstraints = NO;
[self addSubview: viewFromController];

NSArray* constraint_2 = [NSLayoutConstraint constraintsWithVisualFormat: @"|[n(200)]|"
options: 0
metrics: nil
views: @{ @"n" : viewFromController}];
NSArray* constraint_3 = [NSLayoutConstraint constraintsWithVisualFormat: @"V:|[n(==l)]|"
options: 0
metrics: nil
views: @{ @"n" : viewFromController, @"l" : self}];
[self addConstraints: constraint_2];
[self addConstraints: constraint_3];

它适用于 IOS8,但不适用于 IOS7。

iOS8>

enter image description here

constraint (
"<NSLayoutConstraint:0x7fa1507351d0 UIView:0x7fa150734a60.trailingMargin == UIView:0x7fa150734b30.trailing + 100>",
"<NSLayoutConstraint:0x7fa150735220 UIView:0x7fa150734b30.top == UIView:0x7fa150734a60.topMargin>",
"<_UILayoutSupportConstraint:0x7fa150730380 V:[_UILayoutGuide:0x7fa150734c60(0)]>",
"<_UILayoutSupportConstraint:0x7fa150732380 V:|-(0)-[_UILayoutGuide:0x7fa150734c60] (Names: '|':UIView:0x7fa150734a60 )>",
"<_UILayoutSupportConstraint:0x7fa150734200 V:[_UILayoutGuide:0x7fa150734d90(0)]>",
"<_UILayoutSupportConstraint:0x7fa150735110 _UILayoutGuide:0x7fa150734d90.bottom == UIView:0x7fa150734a60.bottom>"
)

iOS7>

enter image description here

constraint (
"<NSLayoutConstraint:0x15d49890 H:[UIView:0x15d468c0]-(108)-| (Names: '|':UIView:0x15d44690 )>",
"<NSLayoutConstraint:0x15d4c460 V:|-(8)-[UIView:0x15d468c0] (Names: '|':UIView:0x15d44690 )>",
"<_UILayoutSupportConstraint:0x15d46740 V:[_UILayoutGuide:0x15d57a20(0)]>",
"<_UILayoutSupportConstraint:0x15d4f1b0 V:|-(0)-[_UILayoutGuide:0x15d57a20] (Names: '|':UIView:0x15d44690 )>",
"<_UILayoutSupportConstraint:0x15d54120 V:[_UILayoutGuide:0x15d4f780(0)]>",
"<_UILayoutSupportConstraint:0x15d46be0 _UILayoutGuide:0x15d4f780.bottom == UIView:0x15d44690.bottom>"
)

有人可以解释为什么会发生这样的事情吗(不同之处在于恰好 8 点的白色方 block 的上部空间)? (毕竟 0 常量不应该改变)

谢谢。

最佳答案

在 iOS8 中,约束被固定到 UIView 的 layoutMargins View 的(默认 8pt 边距!),而不是实际的 super View 的框架。

layoutMargins 采用 UIEdgeInsets 值,让您可以显式定义空白,您的 View 可以使用该空白来指导应放置界面部分的位置。 source

要修复它,请将您的 View 直接限制在父 View 的顶部,而不是相对于边距。这可以在 IB 中完成。要在代码中执行此操作,您可以在 iOS8 中将 super View 的 layoutMargins 设置为 UIEdgeInsetsZero

关于ios - NSLayoutConstraint layout_Margin 从 iOS 7 到 iOS 8 的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27381295/

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