显示具有程序化自动布局的视图

Posted

技术标签:

【中文标题】显示具有程序化自动布局的视图【英文标题】:Displaying views with programmatic auto layout 【发布时间】:2014-05-09 21:53:44 【问题描述】:

编辑

我正在使用程序化自动布局,但这个问题似乎无法解决,

在这个班级

@interface FooterButtonView : UIView 
...

我正在尝试并排排列两个视图

    - (void)setUpViewWithTwoElements:(UIView*)element1 :(UIView*)element2

    element1.translatesAutoresizingMaskIntoConstraints = NO;
    element2.translatesAutoresizingMaskIntoConstraints = NO;

    NSDictionary* views = @@"element1":element1, @"element2":element2;
    NSDictionary* metrics = @@"buttonHeight":@30.0;
    NSString* horizontalFormatString = @"H:|-[element1]-[element2]-|";
    NSString* verticalFormatString = @"V:[element1(buttonHeight)]-|";

    [self addConstraints:[NSLayoutConstraint
                            constraintsWithVisualFormat:horizontalFormatString
                            options: NSLayoutFormatAlignAllTop | NSLayoutFormatAlignAllBottom
                            metrics:nil
                            views:views]];

    [self addConstraints:[NSLayoutConstraint
                          constraintsWithVisualFormat:verticalFormatString
                          options:nil
                          metrics:metrics
                          views:views]];

但是没有显示任何元素。

在初始化中,我添加了两个子视图,然后调用了上述函数。这两个元素都来自 UIButton。

非常感谢任何建议。谢谢!

【问题讨论】:

您只创建了一组约束,它是水平的,并将按钮设置为 30 px 宽(不高)。尝试创建两组约束,一组用于水平,一组用于垂直,并在格式字符串的开头使用“V:”和“H:”明确设置方向。 你知道你的init方法被调用了吗? 【参考方案1】:

假设调用此代码的 init 方法本身被调用(并且 FooterButtonView 以非零大小显示),您应该会看到您发布的代码中的某些内容。您缺少的一件事是两个视图的相对水平大小。使用您拥有的代码,系统无法知道每个元素应该是什么大小,只是它们应该占据整个宽度减去标准间距。如果你想让两个视图大小一样,那就改成这样,

NSString* horizontalFormatString = @"H:|-[element1]-[element2(==element1)]-|";

【讨论】:

以上是关于显示具有程序化自动布局的视图的主要内容,如果未能解决你的问题,请参考以下文章

具有单个 uiviewcontroller 和多个视图的自动布局 iOS

具有固定大小视图和自动调整大小的表格视图的自动布局

具有锚样式自动布局约束的 UIButtons 未显示

具有自动布局的全屏 UICollectionViewCell

如何为不同的屏幕尺寸创建具有自动布局的比例视图?

在具有自动布局的 UIView 之间切换