在UIButton循环问题中使用“addConstraint”时会出现按钮x位置,
for (int ix = 0; ix<7; ix++) {
UIButton *segmentButton = [[UIButton alloc] init];
[segmentButton setTitle:[_segmentButtonTitleArray objectAtIndex:ix] forState:UIControlStateNormal];
[_segmentView addSubview:segmentButton];
[segmentButton setTranslatesAutoresizingMaskIntoConstraints:NO];
[_segmentView addConstraint:[NSLayoutConstraint constraintWithItem:segmentButton
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:_segmentView
attribute:NSLayoutAttributeWidth
multiplier:1.0/7
constant:0]];
[_segmentView addConstraint:[NSLayoutConstraint constraintWithItem:segmentButton
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:segmentButton.frame.size.height]];
[_segmentView addConstraint:[NSLayoutConstraint constraintWithItem:segmentButton
attribute:NSLayoutAttributeLeft
relatedBy:NSLayoutRelationEqual
toItem:_segmentView
attribute:NSLayoutAttributeLeft
multiplier:1.0
constant:segmentButtonXposition]];
[_segmentView addConstraint:[NSLayoutConstraint constraintWithItem:segmentButton
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:_segmentView
attribute:NSLayoutAttributeTop
multiplier:1.0
constant:segmentButton.layer.frame.origin.y]];
segmentButtonXposition = segmentButtonXposition +1+_segmentView.frame.size.width/7-1;
}
期望的结果是这样的,但是无法产生结果。
答案 0 :(得分:0)
旋转后肯定会占用前一个宽度。了解如何计算约束的left
属性值;来自segmentVIew's
框架,您在轮换后没有更新。
因此,如果我们说纵向方向,您的计算结果为768/7 = ~109
。但是,对于横向方向,此计算不正确,constraint.constant
值应使用1024/7 = ~146
更新。但是你没有这样做,所以正在采取旧的价值。
要解决此问题,您可以在每次设备轮换时更新每个约束。但这将是乏味的,因为您需要为每个约束设置一个变量,然后遍历所有约束。
更好的方法是保持每个UILabel的相等宽度约束。
- 每个标签的等宽
- label1.leading = segmentView.leading
- label7.trainling = segmentView.trailing
- label(n).trailing = label(n + 1).leading
醇>
供参考检查我的回答here。通过它应用于UIScrollView
,但它将帮助您理解这种逻辑。而且我已经使用了VFL来更加简洁。