gpt4 book ai didi

iOS8 自动布局以编程方式固定到相对布局边距

转载 作者:技术小花猫 更新时间:2023-10-29 11:00:11 25 4
gpt4 key购买 nike

我有一个 UI 元素(实际上是 UISwitch,但并不重要),它在 Interface Builder 中将前导和尾随空间固定到 super View 。在 Xcode 6 中约束看起来像这样:

Constraint pin

前导空格的约束实际上是相同的。约束值为42.0分

这正是我想要的,因为对于不同的设备,我可以更改 UIView 上的 layoutMargins 属性,并且约束将正常工作,以增加 View 之间的边距。

现在我想在代码中添加另一个 View ,该 View 也将前导和尾随空格固定到它的 super View 边距,因此设置为 super View 的相同 layoutMargins 将起作用。

我使用视觉格式语言固定 View ,语法如下:

NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|-42.0-[separatorView]-42.0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(self.contentView, separatorView)];

[self.contentView addConstraints:constraints];
[self.contentView setNeedsUpdateConstraints];

这可行,但是 layoutMargins 属性在使用此约束时没有效果,因此它显然没有固定到边距,而是直接固定到 superview。

所以我的问题是:

如何使用视觉格式语言将 UI 元素空间固定到代码中的边距?或者,如果不可能,如何使用 constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant: API 固定?

最佳答案

在 iOS8 中,视觉格式语言已经更新,“|-”或“-|”将默认使用父 View 的 layoutMargins 属性定义的间距。

所以使用视觉格式语言的答案如下:

// programmatically set the layoutMargins, only if
// you want non-default values and they are not already set in IB!
self.contentView.layoutMargins = UIEdgeInsetsMake(0,42,0,42); // set left and right margins to 42

// assume: seperatorView is already a subview of self.contentView

// separatorView will use the constraints because we write "-" between it and the superview edge
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|-[separatorView]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(separatorView)];
[self.contentView addConstraints:constraints];

如果你想在通过直接 API 创建约束时引用布局边距,那么你可以使用新的 iOS8 only 布局属性:

NSMutableArray * constraints = [NSMutableArray array]; 
[constraints addObject:[NSLayoutConstraint constraintWithItem:self.contentView
attribute:NSLayoutAttributeLeftMargin
relatedBy:NSLayoutRelationEqual
toItem:separatorView
attribute:NSLayoutAttributeLeft
multiplier:1.0
constant:0]];
[constraints addObject:[NSLayoutConstraint constraintWithItem:self.contentView
attribute:NSLayoutAttributeRightMargin
relatedBy:NSLayoutRelationEqual
toItem:separatorView
attribute:NSLayoutAttributeRight
multiplier:1.0
constant:0]];
[self.contentView addConstraints:constraints];

关于iOS8 自动布局以编程方式固定到相对布局边距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26157077/

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