显示具有程序化自动布局的视图
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