以编程方式更改 UIStackView 的对齐方式无法正常工作

programmatically change the aligment of a UIStackView does not work properly

我有:

这是我的视图层次结构:

我想做的事情:

我想在触摸按钮 b1 时将 S1 的对齐方式从 "Center" 更改为 "Top"。

我试过的

- (void) changeAlignment {
  NSLog(@"P-%li",(long)S1.alignment);
  S1.alignment = UIStackViewAlignmentTop;
  NSLog(@"P-%li",(long)S1.alignment);
  [pView layoutIfNeeded];
}

这听起来很明显,但行不通!!有趣的是,它有时会工作,但突然停止工作。现在,当我点击 b1 时,S1 的对齐方式发生了变化,但在视觉上它根本没有变化。

我已经尝试使用 [self.view setNeedsLayout] [self.view layoutIfNeeded] 甚至 [S1 layoutIfNeeded] 和 none 都可以工作。

我哪里做错了??..它怎么可能真的有效却突然停止工作了!!??

任何人都可以帮助我吗??...这让我发疯。

我认为这个答案与中的答案相同。

对此行为的解释如下:(1)stackView 自动生成布局其排列子视图所需的约束,(2)定义水平 stackview S1 和另一个 stackView S2 作为排列的子视图S1,使 S1 创建一些约束,当您将 S1 的对齐 属性 从中心更改为顶部并且反之亦然。因此,由于自动生成的约束 S1 在更改对齐 属性 后不受影响或根本没有更改,因此 UI 不会反映任何更改,也没有动画。如果有人想出另一种解释,请告诉我。