Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在UITableView单元格中设置约束,使UIButtons保持适当的间距_Ios_Xcode_Uitableview_Interface Builder - Fatal编程技术网

Ios 在UITableView单元格中设置约束,使UIButtons保持适当的间距

Ios 在UITableView单元格中设置约束,使UIButtons保持适当的间距,ios,xcode,uitableview,interface-builder,Ios,Xcode,Uitableview,Interface Builder,这是我的问题。我已经在interface builder中完成了一系列关于约束的教程,我了解固定。下面我的应用程序使用UITableView,在UITableView单元格中有4个UIButton和4个UILabel。我想保持更大屏幕尺寸的间距,如下所示。我想我的意思是,我希望间距随屏幕大小而动态增加,但图像的大小保持不变。如果我尝试将左右UIButton固定到容器的各自边缘,则此距离不会动态增加,并且中心会有一个很大的间隙。如何设置它,使其布局与较小屏幕尺寸的布局相同 您可以将一些透明视图添加

这是我的问题。我已经在interface builder中完成了一系列关于约束的教程,我了解固定。下面我的应用程序使用UITableView,在UITableView单元格中有4个UIButton和4个UILabel。我想保持更大屏幕尺寸的间距,如下所示。我想我的意思是,我希望间距随屏幕大小而动态增加,但图像的大小保持不变。如果我尝试将左右UIButton固定到容器的各自边缘,则此距离不会动态增加,并且中心会有一个很大的间隙。如何设置它,使其布局与较小屏幕尺寸的布局相同


您可以将一些透明视图添加到superview中,并将其用作分隔符。起初我觉得这很奇怪,但我注意到苹果公司推荐了它(它甚至在一条信息量惊人的NSLayout调试消息中作为建议出现)

如您所见,诀窍是将每个间隔的宽度设置为与第一个间隔相等。然后,您将获得可见视图的均匀分布。在您的情况下,您需要将每个按钮/图像组合添加到容器视图(view1…view4)

在故事板中

蓝色视图表示(透明)间隔视图。这是将它们设置为可调整大小的相等宽度的设置。您还应该将可视按钮/图像视图组合设置为固定宽度


虽然这个例子说“添加两个约束”,但实际上它添加了四个约束,所有约束都标记为“视图宽度相等”,但它似乎做了正确的事情。您还需要将每个视图之间的间距(“到最近邻居的间距”)设置为零。

Wow,这似乎是一个非常奇特的解决方法。我可以在interface builder中创建透明的UIView并进行设置吗?如果不在界面生成器中,我会将此代码放在我的自定义cell init方法中,对吗?@Kex,我更喜欢在代码中执行此类操作,这样您可以更轻松地阅读您的意图,但可以在情节提要中设置。查看我的更新。谢谢更新,回答得很好。我来试一试中间的间隔必须在视图中水平居中,对吗?然后,其他约束将从中心约束开始工作。我让它工作了,谢谢。但是,是否有可能使垫片的尺寸随着屏幕尺寸的增加而增加?所以我现在看到的基本上是以6为中心的iPhone5视图。我想知道是否有可能实现它,因此间隔符会放大并将按钮向外展开一点。@Kex-不太正确-最左侧视图的左边缘固定在它的superview上,而最右侧视图的右边缘也固定在superview上。每个中间视图的左边缘和右边缘固定到其各自的左边缘和右邻居的右边缘和左边缘(“到最近邻居的间距”=0)。然后,垫片应弹性对称地膨胀和收缩,以填充可用空间,因为您没有给它们固定的宽度。
[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]];