在 UITableView 单元格中设置约束,保持 UIButtons 适当间隔
Setting constraints in a UITableView cell, keeping UIButtons appropriately spaced
这是我遇到的问题。我已经在界面生成器中完成了一系列关于约束的教程,并且我了解固定。我下面的应用程序使用 UITableView,在 UITableView 单元格中有 4 个 UIButton 和 4 个 UILabel。对于更大的屏幕尺寸,我想像下面那样保持间距。我想我的意思是我希望间距随着屏幕尺寸的增加而动态增加,但图像的尺寸保持不变。如果我尝试将左右 UIButtons 固定到它们各自的容器边缘,这个距离将不会动态增加,并且在中心会有一个很大的差距。我如何设置才能使布局与较小屏幕尺寸的布局相同?
您可以在父视图中添加一些透明视图,并将它们用作 spacers。一开始我觉得这很奇怪,但我注意到 Apple 推荐它(它甚至作为一个建议出现在他们信息量惊人的 NSLayout 调试消息中)
[self.view addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:
@"H:|[spacer1][view1]\
[spacer2(==spacer1)][view2]\
[spacer3(==spacer1)][view3]\
[spacer4(==spacer1)][view4]\
[spacer5(==spacer1)]|"
options:NSLayoutFormatAlignAllTop
metrics:0
views:viewsDictionary]];
如您所见,诀窍是将每个 spacer 的宽度设置为等于第一个 spacer 的宽度。然后您将获得均匀分布的可见视图。在您的情况下,您会将每个 button/image 组合添加到容器视图 (view1 ... view4)。
在情节提要中...
蓝色视图代表(透明)spacer 个视图。这是使它们具有可调整大小的相等宽度的设置。您还应该将可见 button/image 视图组合设置为固定宽度。
虽然这个例子说 'add two constraints' 它实际上增加了四个,都标记为 'equal width to view' - 但它似乎做了正确的事情。您还需要将每个视图 ('spacing to nearest neighbour') 之间的 space 设置为零。
这是我遇到的问题。我已经在界面生成器中完成了一系列关于约束的教程,并且我了解固定。我下面的应用程序使用 UITableView,在 UITableView 单元格中有 4 个 UIButton 和 4 个 UILabel。对于更大的屏幕尺寸,我想像下面那样保持间距。我想我的意思是我希望间距随着屏幕尺寸的增加而动态增加,但图像的尺寸保持不变。如果我尝试将左右 UIButtons 固定到它们各自的容器边缘,这个距离将不会动态增加,并且在中心会有一个很大的差距。我如何设置才能使布局与较小屏幕尺寸的布局相同?
您可以在父视图中添加一些透明视图,并将它们用作 spacers。一开始我觉得这很奇怪,但我注意到 Apple 推荐它(它甚至作为一个建议出现在他们信息量惊人的 NSLayout 调试消息中)
[self.view addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:
@"H:|[spacer1][view1]\
[spacer2(==spacer1)][view2]\
[spacer3(==spacer1)][view3]\
[spacer4(==spacer1)][view4]\
[spacer5(==spacer1)]|"
options:NSLayoutFormatAlignAllTop
metrics:0
views:viewsDictionary]];
如您所见,诀窍是将每个 spacer 的宽度设置为等于第一个 spacer 的宽度。然后您将获得均匀分布的可见视图。在您的情况下,您会将每个 button/image 组合添加到容器视图 (view1 ... view4)。
在情节提要中...
蓝色视图代表(透明)spacer 个视图。这是使它们具有可调整大小的相等宽度的设置。您还应该将可见 button/image 视图组合设置为固定宽度。
虽然这个例子说 'add two constraints' 它实际上增加了四个,都标记为 'equal width to view' - 但它似乎做了正确的事情。您还需要将每个视图 ('spacing to nearest neighbour') 之间的 space 设置为零。