簡體   English   中英

UIView固定到屏幕的邊緣,但幀仍為0,0

[英]UIView pinned to edges of screen, but frame remains 0,0

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

[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]];

可能出了什么問題,或者我對自動布局的理解不正確?

雖然這並不直接回答你關於汽車的布局問題,我覺得做你想做的事是沒有大幅容易。 只需將視圖的框架設置為視圖控制器的框架,然后將視圖的自動縮放蒙版設置為靈活的高度和寬度,框架將自動調整大小。

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];

另外,使用您最初提供的代碼,如果您刪除將超級視圖的將TranslatesAutoresizingMaskIntoConstraints設置為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]];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM