这里是我有的代码...这是一个简单的问题...也许我不应该用UIView做...但我只是想绘制一条装饰水平线来分隔内容。我得到的是没有错误,这条线没有画出来。如果我用框架初始化它并关闭自动布局,那么我确实看到了该行,但这不是我想要实现的方式,因为所有内容都是自动布局的。如何使用UIView和自动布局绘制水平线?
在viewDidLoad下面调用其他方法来创建UI元素并添加约束。
- (void)viewDidLoad {
[super viewDidLoad];
// Add main layout
[self.scrollView addSubview:self.profileInfoContainer];
// Add UI elements
[self.profileInfoContainer addSubview:self.email];
[self.profileInfoContainer addSubview:self.userName];
[self.profileInfoContainer addSubview:self.hLineSeperator];
[self.profileInfoContainer addSubview:self.navigationContainer];
// Add Constraints
[self addInfoContainerConst];
}
下面我添加的约束在profileInfoContainer所有UI元素,包括hLineSeperator
- (void)addInfoContainerConst {
// Add constrains
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(_userName, _email, _hLineSeperator, _navigationContainer);
NSDictionary *metrics = @{
@"vTop":@60,
@"vBttm":@5,
@"hLeft":@25,
@"hRight":@25,
@"vMiddle":@5
};
NSArray *constraint_POS_V = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-vTop-[_userName]-vMiddle-[_email]-vMiddle-[_hLineSeperator]-vMiddle-[_navigationContainer]|"
options:0
metrics:metrics
views:viewsDictionary];
NSArray *constraint_POS_H = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-hLeft-[_userName]-hRight-|"
options:0
metrics:metrics
views:viewsDictionary];
NSArray *constraint_POS_H_1 = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-hLeft-[_email]-hRight-|"
options:0
metrics:metrics
views:viewsDictionary];
NSArray *constraint_POS_H_2 = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_hLineSeperator(1)]|"
options:0
metrics:metrics
views:viewsDictionary];
NSArray *constraint_POS_H_3 = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_navigationContainer]|"
options:0
metrics:metrics
views:viewsDictionary];
[self.profileInfoContainer addConstraints:constraint_POS_V];
[self.profileInfoContainer addConstraints:constraint_POS_H];
[self.profileInfoContainer addConstraints:constraint_POS_H_1];
[self.profileInfoContainer addConstraints:constraint_POS_H_2];
[self.profileInfoContainer addConstraints:constraint_POS_H_3];
}
下面是创建用于绘制该线的UIView方法
- (UIView*)hLineSeperator {
if (!_hLineSeperator) {
_hLineSeperator = [UIView new];
_hLineSeperator.translatesAutoresizingMaskIntoConstraints = NO;
_hLineSeperator.backgroundColor = [UIColor grayColor];
}
return _hLineSeperator;
}
该行可能在某处。我没有看到任何代码涉及设置hLiveSeperator的框架,尝试设置框架layoutSubviews? – joels
据我所知,如果我设置框架,那么我不再使用自动布局。也许我错了这个假设。限制和自动布局框架不使用。 – CroSensation
发现我的错误,就像我认为这是一个小疏忽......而不是“H:| [_hLineSeperator(1)] |” “V:| -vTop - [_ userName] -vMiddle - [_ email] -vMiddle - [_ hLineSeperator(1)] - vMiddle - [_ navigationContainer] |”。无论如何,我会留下它,以防其帮助某人。 – CroSensation