我正在使用 PureLayout 来实现 UIView 中 subview 的 AutoLayout。但我不知道组织代码的最佳实践。
应该把AutoLayout相关的代码放在UIView的init中,还是updateConstraints 和layoutSubviews 等重写方法? p>
Best Answer-推荐答案 strong>
比如我想创建一个UIView的子类叫PHView,对于任何一个phview,都有一个叫centerView的子view,它总是在phview的中心,width/height是0.3*phview的width/height。
https://www.dropbox.com/s/jaljggnymxliu1e/IMG_3178.jpg
#import "HView.h"
#import "Masonry.h"
@interface PHView()
@property (nonatomic, assign) BOOL didUpdateConstraints;
@property (nonatomic, strong) UIView *centerView;
@end
@implementation PHView
- (instancetype)init {
self = [super init];
if (self) {
self.backgroundColor = [UIColor redColor];
self.translatesAutoresizingMaskIntoConstraints = NO;
}
return self;
}
- (UIView *)centerView {
if (!_centerView) {
_centerView = [UIView new];
_centerView.backgroundColor = [UIColor yellowColor];
[self addSubview:_centerView];
}
return _centerView;
}
-(void)updateConstraints {
if (!_didUpdateConstraints) {
_didUpdateConstraints = YES;
[self.centerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self.mas_centerX);
make.centerY.equalTo(self.mas_centerY);
make.width.equalTo(self.mas_width).multipliedBy(0.3);
make.height.equalTo(self.mas_height).multipliedBy(0.3);
}];
}
[super updateConstraints];
}
@end
'didUpdateConstraints' 旨在表明您已添加约束,因此您只会添加一次约束。
在 UIViewController:make phview top left bottom right 20 to margin.
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor greenColor];
PHView *myView = [PHView new];
[self.view addSubview:myView];
[myView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.view).with.insets(UIEdgeInsetsMake(20, 20, 20, 20));
}];
}
关于ios - 我应该把 AutoLayout 代码放在哪里?,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/31376831/
|