我创建了一个继承UIView
的视图,并将其添加到superView
。但是当我检查视图的框架时,我发现它已被更改。但我的代码没有这样做。我不知道为什么。我们来看看代码。
- (void)addBottomView
{
NSArray *viewArray = [[NSBundle mainBundle] loadNibNamed:@"WYOrderDetailBottomView" owner:nil options:nil];
if (viewArray.count > 0) {
self.bottomContentView = viewArray.firstObject;
}
self.bottomContentView.delegate = self;
self.bottomContentView.frame = CGRectMake(0.0f, 0.0f, SCREENWIDTH, 0.0f);
MLOG(@"%@", NSStringFromCGRect(self.bottomContentView.frame));
self.bottomViewHeightConstraint.constant = 0.0f;
[self updateViewConstraints];
[self.view layoutIfNeeded];
MLOG(@"%@", NSStringFromCGRect(self.bottomContentView.frame));
[self.bottomBackView addSubview:self.bottomContentView];
MLOG(@"%@", NSStringFromCGRect(self.bottomContentView.frame));
}
这个方法在viewDidLoad
这样调用,iphone6中视图的日志是(0,0,375,0)。
- (void)viewDidLoad
{
[super viewDidLoad];
self.title = @"预约单详情";
self.isNeedRefreshUI = YES;
[self addBottomView];
[self configTableView];
[self addNotificationObserver];
}
但在另一种方法中,我检查view(self.bottomContentView).
- (void)getOrderDetailInfo
{
MLOG(@"%@", NSStringFromCGRect(self.bottomContentView.frame));
}
帧变为(0,0,430,0),我不写任何代码来改变它的帧。它是如何工作的?
答案 0 :(得分:2)
如果您使用Storyboard或Xib,autolayout或constaint会自动设置您的帧。在[self addBottomView];
或viewWillAppear
中调用此方法viewDidAppear
以手动设置框架检查此
答案 1 :(得分:1)
[self.view layoutIfNeeded]
在约束中,此方法调用任何更新的帧在视图中等待显示新视图。请在此代码中查看。
答案 2 :(得分:1)
可能是你在xib文件中有宽度约束(或者在运行时自动调整遮罩约束)。您可以通过在控制台中打印来查看此约束,例如,您可以使用po命令:
po self.view.constraints
此外,如果您使用自动布局,则不应直接更改视图框架,只应更改constraint constant值。