我创建了一个UIView,然后添加了Anchor约束,但是当我想读取值时我遇到了问题......
在这种情况下,如你所见,我创建了一个NSLayoutConstraint属性来获取我的uiview的锚点宽度...然后我创建了一个包含约束的CGFloat但我的NSLog总是返回一个ZERO值。
我错在哪里?如何获取分配给锚点的UIView的宽度值? UIView *trackLine = [[UIView alloc] init];
trackLine.backgroundColor = [self trackLineColor];
trackLine.translatesAutoresizingMaskIntoConstraints = NO;
[self addSubview:trackLine];
[trackLine.topAnchor constraintEqualToAnchor:mediaTitle.bottomAnchor constant:25].active = YES;
[trackLine.rightAnchor constraintEqualToAnchor:self.rightAnchor].active = YES;
[trackLine.heightAnchor constraintEqualToConstant:1].active = YES;
self.width = [trackLine.widthAnchor constraintEqualToAnchor:self.widthAnchor multiplier:.8];
self.width.active = YES;
CGFloat trackLineLenght = self.width.constant;
NSLog(@"TRACK LINE %f", trackLineLenght );
NSLog结果:
**2017-10-21 17:10:35.096562+0200 [5501:1994879] TRACK LINE 0.000000**
答案 0 :(得分:1)
首先,不要使用“width”作为属性名称......非常混乱,因为宽度已经在很多地方使用过了。
所以,我们假设你有:
@property NSLayoutConstraint *trackLineWidthConstraint;
.widthAnchor
根据“锚的宽度是多少”实际上没有宽度。您定义约束的方式:
self.trackLineWidthConstraint = [trackLine.widthAnchor constraintEqualToAnchor:self.widthAnchor multiplier:.8];
表示“将.trackLineWidthConstraint
属性设置为self
宽度的80%。因此,只要self
的实际宽度发生变化,trackLine
的实际宽度就会变宽视图将更改为新宽度的80%。
.constant
为零。如果它不是零,那么在计算80%之后,该值将被添加。例如:
self.trackLineWidthConstraint = [trackLine.widthAnchor constraintEqualToAnchor:self.widthAnchor multiplier:.8];
// if self is 200-pts wide, trackLine will be 160-pts
self.trackLineWidthConstraint.constant = 10
// trackLine width is now (200 * 0.8) + 10, or 170-pts
如果您想获得trackLine
的当前宽度,可以从.frame
获取它(自动布局完成后)。
希望这不仅会让人感到更加困惑:)