2014-08-29 59 views
0

我想將UIView插入到覆蓋整個屏幕的視圖層次結構中。我的方法是創建一個UIView實例,將它添加到主視圖,然後添加約束來將新視圖的邊緣固定到父視圖。 UIViews本身沒有固有的內容大小,但通過將邊緣固定到超級視圖,UIView應該有一個更大的框架。UIView固定到屏幕的邊緣,但框架仍然是0,0

[self.view setTranslatesAutoresizingMaskIntoConstraints:NO]; 
UIView *inviteCodeView = [[UIView alloc] initWithFrame:CGRectZero]; 
inviteCodeView.opaque = NO; 
inviteCodeView.alpha = 0.5; 
inviteCodeView.backgroundColor = [UIColor colorWithWhite:0.3 alpha:1]; 
[inviteCodeView setTranslatesAutoresizingMaskIntoConstraints:NO]; 

inviteCodeView.backgroundColor = [UIColor redColor]; 
[self.view addSubview:inviteCodeView]; 
NSDictionary *views = NSDictionaryOfVariableBindings(inviteCodeView); 

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[inviteCodeView]-0-|" options:0 metrics:nil views:views]]; 
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[inviteCodeView]-0-|" options:0 metrics:nil views:views]]; 

什麼可能會出錯,或者是我對Autolayout的理解不正確?

回答

1

儘管這並不能直接回答你關於自動佈局的問題,但我發現你要做的事情是如果沒有它,就會更容易。只需將視圖的框架設置爲視圖控制器的框架,並將視圖的自動調整屏蔽設置爲靈活的高度和寬度,並且框架將自動調整大小沒有問題。

UIView *inviteCodeView = [[UIView alloc] initWithFrame:self.view.frame]; 
inviteCodeView.opaque = NO; 
inviteCodeView.alpha = 0.5; 
inviteCodeView.backgroundColor = [UIColor colorWithWhite:0.3 alpha:1]; 
inviteCodeView.autoresizingMask = UIViewAutoresizingFlexibleHeight + UIViewAutoresizingFlexibleWidth; 
[self.view addSubview:inviteCodeView]; 

此外,使用您最初提供的代碼,一切正常,如果你刪除第一行,你setTranslatesAutoresizingMaskIntoConstraints爲NO超級觀點:

// [self.view setTranslatesAutoresizingMaskIntoConstraints:NO]; 
    UIView *inviteCodeView = [[UIView alloc] initWithFrame:CGRectZero]; 
    inviteCodeView.opaque = NO; 
    inviteCodeView.alpha = 0.5; 
    inviteCodeView.backgroundColor = [UIColor colorWithWhite:0.3 alpha:1]; 
    [inviteCodeView setTranslatesAutoresizingMaskIntoConstraints:NO]; 

    inviteCodeView.backgroundColor = [UIColor redColor]; 
    [self.view addSubview:inviteCodeView]; 
    NSDictionary *views = NSDictionaryOfVariableBindings(inviteCodeView); 

    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[inviteCodeView]-0-|" options:0 metrics:nil views:views]]; 
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[inviteCodeView]-0-|" options:0 metrics:nil views:views]];