這裏是我有的代碼...這是一個簡單的問題...也許我不應該用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