- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图让自动布局管理器根据 super View 的宽度调整 View 的中心点。我不明白为什么这是属性的“无效配对”(如崩溃和 NSInvalidArgumentException 所述)
UIView *ac;
NSLayoutConstraint *cXloc = [NSLayoutConstraint constraintWithItem:ac
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:ac.superview
attribute:NSLayoutAttributeWidth
multiplier:.1
constant:x*ac.superview.frame.size.width*.2];
[ac.superview addConstraint:cXloc];
最佳答案
如果您将 ac 的 AttributeCenterX 与其 super View 的 AttributeCenterX、AttributeLeading 或 AttributeTrailing 相关联,您应该能够使用乘数和约束来表达所需的约束。请记住,仅在创建约束时才计算常量,并且您的示例的常量不会随着 ac.superview 的宽度变化而更新。
如果您可以用文字表达您希望 ac 相对于其父 View 的位置,我们可以建议一个约束。
编辑
这是一个包含 5 个 NSButton 的示例。它们本身和它们之间的空间扩大,使空间与按钮一样宽 30%,所有按钮具有相同的宽度,并且所有空间具有相同的宽度。仅为间距创建 4 个不可见的 NSView 非常麻烦,尤其是考虑到它在自动布局之外工作。但如果你很好奇:
// Assuming these NSViews and NSButtons exist,
//NSView* superview ;
//NSButton *buttonOne, *buttonTwo, *buttonThree, *buttonFour, *buttonFive ;
[superView removeConstraints:superView.constraints] ;
// Create empty NSViews to fill the space between the 5 buttons.
NSView* spaceOne = [NSView new] ;
NSView* spaceTwo = [NSView new] ;
NSView* spaceThree = [NSView new] ;
NSView* spaceFour = [NSView new] ;
spaceOne.translatesAutoresizingMaskIntoConstraints = NO ;
spaceTwo.translatesAutoresizingMaskIntoConstraints = NO ;
spaceThree.translatesAutoresizingMaskIntoConstraints = NO ;
spaceFour.translatesAutoresizingMaskIntoConstraints = NO ;
[superView addSubview:spaceOne] ;
[superView addSubview:spaceTwo] ;
[superView addSubview:spaceThree] ;
[superView addSubview:spaceFour] ;
NSDictionary* views = NSDictionaryOfVariableBindings(superView,buttonOne,buttonTwo,buttonThree,buttonFour,buttonFive,spaceOne,spaceTwo,spaceThree,spaceFour) ;
// Vertically align buttonOne to its superview however you like.
[superView addConstraints: [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[buttonOne]" options:0 metrics:nil views:views ] ] ;
// Make the "space" NSViews' widths equal and >= 10. Make the buttons' widths equal.
[superView addConstraints: [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[buttonOne][spaceOne(>=10)][buttonTwo(==buttonOne)][spaceTwo(==spaceOne)][buttonThree(==buttonOne)][spaceThree(==spaceOne)][buttonFour(==buttonOne)][spaceFour(==spaceOne)][buttonFive(==buttonOne)]|" options: NSLayoutFormatAlignAllCenterY metrics:nil views:views ] ] ;
// Make the "space" NSViews' widths 30% of the NSButtons' widths.
[superView addConstraint: [NSLayoutConstraint constraintWithItem: spaceOne
attribute: NSLayoutAttributeWidth
relatedBy: NSLayoutRelationEqual
toItem: buttonOne
attribute: NSLayoutAttributeWidth
multiplier: 0.3
constant: 0 ] ] ;
关于ios6 - 为什么 NSLayoutAttributeCenterX 是带有 NSLayoutAttributeWidth 的 'Invalid pairing',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13867736/
当使用 NSLayoutAttributeCenterX 属性时,乘数 1 会导致与引用 View 匹配的中心。增加该值将其向左移动,向 0 减小将其向右移动。 通过使用 2.5、1 和 0.625
我试图让自动布局管理器根据 super View 的宽度调整 View 的中心点。我不明白为什么这是属性的“无效配对”(如崩溃和 NSInvalidArgumentException 所述) UIVi
我有一些自动布局代码可以在 iOS 7 中运行,但不能在 iOS 8 中运行。我的代码在两个版本之间没有变化。 情况是我有一个 View Controller ,其中包含一些应该像这样垂直堆叠的 su
我是一名优秀的程序员,十分优秀!