首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSLayoutConstraint设置

NSLayoutConstraint设置
EN

Stack Overflow用户
提问于 2013-02-23 01:07:59
回答 1查看 3.7K关注 0票数 1

我正在尝试设置一个面板来显示一些信息。我很难让自动排版按我想要的那样工作。

这是我想要做的:

我有一个headerView,一个UIImageView和5个标签。我想要标签垂直排列,我希望他们从UIImageView的8个间距。我可以很容易地垂直排列它们:

代码语言:javascript
复制
[contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[headerView]-[acresLabel]-[addedLabel(==acresLabel)]-[typeLabel(==acresLabel)]-[zonesLabel(==acresLabel)]-[sceneLabel(==acresLabel)]-|"
                                                                    options:0
                                                                    metrics:nil
                                                                      views:NSDictionaryOfVariableBindings(headerView, acresLabel, addedLabel, typeLabel, zonesLabel, sceneLabel)]];

但事实证明,让他们在图像视图中排成一行是乏味的/冗长的:

代码语言:javascript
复制
[contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[imageView]-[acresLabel]"
                                                                    options:0
                                                                    metrics:nil
                                                                      views:NSDictionaryOfVariableBindings(imageView, acresLabel)]];

[contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[imageView]-[addedLabel]"
                                                                    options:0
                                                                    metrics:nil
                                                                      views:NSDictionaryOfVariableBindings(imageView, addedLabel)]];

[contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[imageView]-[typeLabel]"
                                                                    options:0
                                                                    metrics:nil
                                                                      views:NSDictionaryOfVariableBindings(imageView, typeLabel)]];

[contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[imageView]-[zonesLabel]"
                                                                    options:0
                                                                    metrics:nil
                                                                      views:NSDictionaryOfVariableBindings(imageView, zonesLabel)]];

[contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[imageView]-[sceneLabel]"
                                                                    options:0
                                                                    metrics:nil
                                                                      views:NSDictionaryOfVariableBindings(imageView, sceneLabel)]];

这似乎是一种更好的方法,然后为图像视图的每个标签设置一个约束。我尝试将NSLayoutFormatAlignAllCenterX添加到第一个约束,但它将它们都设置为内容视图的中心X,不会使标签的中心X彼此对齐。垂直使用时,NSLayoutFormatAlignAllBaseline会出现错误和崩溃。

我将不得不再次对数据执行此操作(Acres:'value')。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-23 01:39:24

有了NSLayoutFormatAlignAllCenterX,您就走上了正确的道路。

代码语言:javascript
复制
// NSDictionary* views ;
[NSLayoutConstraint constraintsWithVisualFormat:@"V:[headerView]-[acresLabel]"  options:0  metrics:nil  views:views] ;
// Use any of the horizontal NSLayoutFormats (NSLayoutFormatAlignAllLeft, NSLayoutFormatAlignAllRight, NSLayoutFormatAlignAllLeading, NSLayoutFormatAlignAllTrailing, NSLayoutFormatAlignAllCenterX)
[NSLayoutConstraint constraintsWithVisualFormat:@"V:[acresLabel]-[addedLabel(==acresLabel)]-[typeLabel(==acresLabel)]-[zonesLabel(==acresLabel)]-[sceneLabel(==acresLabel)]-|" options:NSLayoutFormatAlignAllCenterX  metrics:0  views:views] ;
[NSLayoutConstraint constraintsWithVisualFormat:@"H:[imageView]-[acresLabel]"  options:0  metrics:nil  views:views] ;
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15029556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档