视图的宽度奇怪地改变了

时间:2015-12-22 06:16:29

标签: ios objective-c uiview

我创建了一个继承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),我不写任何代码来改变它的帧。它是如何工作的?

3 个答案:

答案 0 :(得分:2)

如果您使用Storyboard或Xib,autolayout或constaint会自动设置您的帧。在[self addBottomView];viewWillAppear中调用此方法viewDidAppear以手动设置框架检查此

documentationStackoverflow

答案 1 :(得分:1)

[self.view layoutIfNeeded] 

在约束中,此方法调用任何更新的帧在视图中等待显示新视图。请在此代码中查看。

答案 2 :(得分:1)

可能是你在xib文件中有宽度约束(或者在运行时自动调整遮罩约束)。您可以通过在控制台中打印来查看此约束,例如,您可以使用po命令:

po self.view.constraints

此外,如果您使用自动布局,则不应直接更改视图框架,只应更改constraint constant值。