UIStackview左对齐

Yon*_*Pao 8 ios swift uistackview

我正在尝试将UIStackview中的项目水平对齐到左侧.

无论如何以编程方式执行此操作?我试图通过故事板这样做,但没有成功.出于某种原因,UIStackView中的项目居中.

sht*_*kgm 13

如果您将StackView设置轴属性用于"水平",我认为您无法将其对齐到左侧.

但有一种方法可以让它在视觉上留下.

  1. 使用"相等"关系设置StackView前导约束
  2. 将StackView尾随约束设置为"大于或等于"

像这样

stackView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
stackView.trailingAnchor.constraint(greaterThanOrEqualTo: view.trailingAnchor).isActive = true
Run Code Online (Sandbox Code Playgroud)

  • 也许我遗漏了一些东西,但如果我们想将元素向左对齐,它应该是 lessThanOrEqual (3认同)
  • 好方案!如果您正在处理故事板和约束,那么您将遇到一些问题.只需放置在运行时删除的占位符即可隐藏此问题. (2认同)

Ank*_*rya 10

尝试在您的堆栈视图中添加一个空间视图,像这样

 // 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];
Run Code Online (Sandbox Code Playgroud)

和做

self.buttonsStackView.distribution = UIStackViewDistributionFill;
Run Code Online (Sandbox Code Playgroud)

  • 我发现只添加一个空的 UIView 就可以了 (2认同)

gbk*_*gbk 9

感谢@Ankit Maurya,提供了 swift 示例的解决方案

 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)
Run Code Online (Sandbox Code Playgroud)

例子:

在此输入图像描述


Bar*_*mre 8

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
    // ...
Run Code Online (Sandbox Code Playgroud)

  • .leading 仅适用于 .vertical,但问题是关于水平的 (4认同)