【发布时间】:2017-05-13 02:47:10
【问题描述】:
我正在尝试将 UIStackview 中的项目水平对齐到左侧。
有没有办法以编程方式做到这一点?我试图通过情节提要做到这一点,但没有成功。出于某种原因,UIStackView 中的项目本身居中。
【问题讨论】:
-
希望this answer对你有用。您需要应用相同的方法,但水平而不是垂直。
标签: ios swift uistackview
我正在尝试将 UIStackview 中的项目水平对齐到左侧。
有没有办法以编程方式做到这一点?我试图通过情节提要做到这一点,但没有成功。出于某种原因,UIStackView 中的项目本身居中。
【问题讨论】:
标签: ios swift uistackview
使用UIStackView.alignment 属性。
参考:https://developer.apple.com/reference/uikit/uistackview/1616243-alignment
【讨论】:
Attributes Inspector
Trailing 987654323 @ @ @ / li>
UIStackView.alignment属性。【讨论】:
感谢各位的建议。我尝试使用 UIStackView.alignment 上的选项,但它从未真正按预期工作。最后我弄乱了 UIStackView 的宽度来达到预期的效果。
if(prdDTO.getShellIcn() == "Y")
{
let icon = UIImageView()
icon.contentMode = UIViewContentMode.scaleAspectFit
icon.image = #imageLiteral(resourceName: "Shellfish")
prdIngredients.addArrangedSubview(icon)
stackviewWidth += 25
}
if(prdDTO.getVegeIcn() == "Y")
{
let icon = UIImageView()
icon.contentMode = UIViewContentMode.scaleAspectFit
icon.image = #imageLiteral(resourceName: "Vege")
prdIngredients.addArrangedSubview(icon)
stackviewWidth += 25
}
if(prdDTO.getSpicyIcn() == "Y")
{
let icon = UIImageView()
icon.contentMode = UIViewContentMode.scaleAspectFit
icon.image = #imageLiteral(resourceName: "Spicy")
prdIngredients.addArrangedSubview(icon)
stackviewWidth += 25
}
prdIngredients.widthAnchor.constraint(equalToConstant: CGFloat(stackviewWidth))
【讨论】:
如果您使用 StackView 将轴属性设置为“水平”, 我认为您不能将其与左侧对齐。
但是有一种方法可以让它在视觉上离开。
喜欢这个
stackView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
stackView.trailingAnchor.constraint(greaterThanOrEqualTo: view.trailingAnchor).isActive = true
【讨论】:
尝试在您的堆栈视图中添加一个空间视图,就像这样
// To Make Our Buttons aligned to left We have added one spacer view
UIButton *spacerButton = [[UIButton alloc] init];
[spacerButton setContentHuggingPriority:UILayoutPriorityFittingSizeLevel forAxis:UILayoutConstraintAxisHorizontal];
[spacerButton setContentCompressionResistancePriority:UILayoutPriorityFittingSizeLevel forAxis:UILayoutConstraintAxisHorizontal];
[self.buttonsStackView addArrangedSubview:spacerButton];
然后制作
self.buttonsStackView.distribution = UIStackViewDistributionFill;
【讨论】:
Swift 4.2 + iOS 12.1 测试:
let stackView: UIStackView = UIStackView(frame: .zero)
stackView.translatesAutoresizingMaskIntoConstraints = false
stackView.axis = .vertical
stackView.alignment = .leading // <- aligns each of your items to the left.
// further setup + setup constraints
// ...
【讨论】:
leading对齐不可用吗?
感谢@Ankit Maurya,提供快速示例的解决方案
let stackView = UIStackView()
stackView.axis = .horizontal
stackView.distribution = .fill
let spacer = UIView()
spacer.isUserInteractionEnabled = false
spacer.setContentHuggingPriority(.fittingSizeLevel, for: .horizontal)
spacer.setContentCompressionResistancePriority(.fittingSizeLevel, for: .horizontal)
// stackView.addArrangedSubview.... any u need
stackView.addArrangedSubview(spacer)
例子:
【讨论】: