使用视觉格式化语言在代码中自动布局 UIViewController

Posted

技术标签:

【中文标题】使用视觉格式化语言在代码中自动布局 UIViewController【英文标题】:Auto Layout of a UIViewController in Code using the Visual Formatting Language 【发布时间】:2013-03-03 21:24:42 【问题描述】:

我想使用可视格式化语言在代码中使用自动布局将视图 emptyAddButton 放置在左下方。这是我目前的方法。

初始化按钮emptyAddButton,自定义UIViewController:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

...
        emptyAddButton = [[AddCardViewController alloc] init];
        [emptyAddButton.view setFrame:CGRectMake(50, 300, 190, 65)]; //to define width + height. x, y is random and should be overwritten by auto auto layout
        [self addChildViewController:emptyAddButton];
        [emptyAddButton.view setTranslatesAutoresizingMaskIntoConstraints:NO];
        [self.view addSubview:emptyAddButton.view];
...

为左下位置+填充(10)分配自动布局

-(void)viewWillAppear:(BOOL)animated
...
    NSDictionary *viewToLayout = [NSDictionary dictionaryWithObject:emptyAddButton.view forKey:@"emptyAddButton"];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(10)-[emptyAddButton]"
                                                                      options:0
                                                                      metrics:nil
                                                                        views:viewToLayout]];

    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat: @"V:[emptyAddButton]-(10)-|"
                                                                      options:0
                                                                      metrics:nil
                                                                        views:viewToLayout]];
...

目前 emptyAddButton 根本不显示。

知道如何正确定位视图吗?

【问题讨论】:

【参考方案1】:

您无法设置框架、关闭自动调整大小的蒙版并添加约束 - 它会丢弃您的框架并重新计算为零宽度和高度。您可以通过注销视图控制器的子视图来确认这一点。

也将大小添加到 VFL 字符串中:

"H:|-(10)-[emptyAddButton(==190)]"

垂直约束也是如此。

顺便说一句,将视图的创建和约束的设置分开没有任何好处。一次完成所有操作(我会在 viewDidLoad 中完成)。目前,每次视图出现时,您都在重新创建约束。

【讨论】:

以上是关于使用视觉格式化语言在代码中自动布局 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章

ios自动布局视觉格式-对齐

不能满足约束 - 视觉格式语言

使用自动布局视觉格式字符串平均分配间距

iOS中的自动布局问题

调整子视图大小的自动布局问题

将 UIImageView 与自动布局对齐