对齐 Swift 中不同单元格的按钮 3
Align Buttons from different cells in Swift 3
我有两个按钮位于 table 的不同单元格上,我希望它们对齐。
第一个单元格由 3 个按钮组成,我只是将它们设置为等宽。
但是对于下面的另一个,我想将它设置为与上面的对齐方式相同。
首先,我尝试保存当前视图的宽度并将其设置为按钮,但没有成功:
let curentWidth = self.viewThatneedsToBeDivided.bounds.width / 3
self.optionBtnCommon.frame.size.width = CGFloat(curentWidth)
然后我尝试设置一个约束,这确实给了我正确的尺寸,但对齐方式很糟糕。
let widthConstraint = NSLayoutConstraint (item: optionBtnCommon, attribute: NSLayoutAttribute.width, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: curentWidth)
self.optionBtnCommon.superview?.addConstraint(widthConstraint)
self.optionBtnCommon.contentHorizontalAlignment = .center
self.viewThatneedsToBeDivided.layoutIfNeeded()
您不会直接关联它们,因为它们位于不同的单元格中,但您有几个选择:
- 更改约束,使它们不再相互关联(等宽),而是与单元格相关(每个约束为单元格或子视图宽度的 0.33)。然后,您可以为单个按钮提供相同的约束。基本上你需要让它们与两者之间一致的东西相关,唯一的东西就是细胞。
- 你可以用隐藏的视图伪造它。所以添加按钮,然后添加另外两个视图并设置相同的约束。然后隐藏其他视图(或根据需要清除颜色)。
- 考虑设置一些布局指南。这些比真正的虚拟视图更好用。
您可以将所有按钮放在同一个单元格中,将前三个按钮嵌入水平堆栈视图,后三个相同,然后将两个堆栈视图嵌入垂直堆栈视图。这应该会给你必要的力量来正确对齐它们。
如果您谈论的是您在问题中显示的支票图像。
请记住,使用以下代码设置按钮的居中对齐
self.optionBtnCommon.contentHorizontalAlignment = .center
- 如果必须居中对齐,请记住行距和
按钮的宽度约束必须相同,只有这样这些图像才会
对齐。
- 如果行距相同但宽度不同,则必须保持左对齐。
- 或者您有第三个选项可以在按钮中设置图像插入 属性 以手动调整对齐方式。
我有两个按钮位于 table 的不同单元格上,我希望它们对齐。
第一个单元格由 3 个按钮组成,我只是将它们设置为等宽。 但是对于下面的另一个,我想将它设置为与上面的对齐方式相同。
首先,我尝试保存当前视图的宽度并将其设置为按钮,但没有成功:
let curentWidth = self.viewThatneedsToBeDivided.bounds.width / 3
self.optionBtnCommon.frame.size.width = CGFloat(curentWidth)
然后我尝试设置一个约束,这确实给了我正确的尺寸,但对齐方式很糟糕。
let widthConstraint = NSLayoutConstraint (item: optionBtnCommon, attribute: NSLayoutAttribute.width, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: curentWidth)
self.optionBtnCommon.superview?.addConstraint(widthConstraint)
self.optionBtnCommon.contentHorizontalAlignment = .center
self.viewThatneedsToBeDivided.layoutIfNeeded()
您不会直接关联它们,因为它们位于不同的单元格中,但您有几个选择:
- 更改约束,使它们不再相互关联(等宽),而是与单元格相关(每个约束为单元格或子视图宽度的 0.33)。然后,您可以为单个按钮提供相同的约束。基本上你需要让它们与两者之间一致的东西相关,唯一的东西就是细胞。
- 你可以用隐藏的视图伪造它。所以添加按钮,然后添加另外两个视图并设置相同的约束。然后隐藏其他视图(或根据需要清除颜色)。
- 考虑设置一些布局指南。这些比真正的虚拟视图更好用。
您可以将所有按钮放在同一个单元格中,将前三个按钮嵌入水平堆栈视图,后三个相同,然后将两个堆栈视图嵌入垂直堆栈视图。这应该会给你必要的力量来正确对齐它们。
如果您谈论的是您在问题中显示的支票图像。
请记住,使用以下代码设置按钮的居中对齐
self.optionBtnCommon.contentHorizontalAlignment = .center
- 如果必须居中对齐,请记住行距和 按钮的宽度约束必须相同,只有这样这些图像才会 对齐。
- 如果行距相同但宽度不同,则必须保持左对齐。
- 或者您有第三个选项可以在按钮中设置图像插入 属性 以手动调整对齐方式。