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

jdgnovmf  于 2023-05-19  发布在  iOS
关注(0)|答案(1)|浏览(166)

我拥有的:

这是我的视图层次结构:

    • 名为b1的按钮,其具有名为“changeAlignment”的动作,该动作在触摸内部时被激活。
  • 一个名为Pview的UIView,带有frame(0,100,414,100)。
  • 名为S1的水平UIStackView,对齐属性设置为“center”。此stackView已固定到pView的边框。
  • 一个名为S2的水平UIStackView,对齐属性设置为“Fill”,内部有两个标签。
    我想做的事:

我想在触摸按钮b1时将S1的对齐方式从“中心”更改为“顶部”。

我努力

- (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],但都没有成功。
我做错了什么??..它怎么可能实际上工作,突然停止工作!!??
有人能帮帮我吗?这简直要把我逼疯了

zxlwwiss

zxlwwiss1#

我认为这个问题的答案与How to programmatically animate the alignment property of an UIStackView in ios 9中的相同。
此行为的解释如下:

  1. stackView自动生成其所需的约束以便对其排列的子视图进行布局,
    1.将水平堆栈视图S1与另一个堆栈视图S2定义为S1的排列子视图,使S1创建一些约束,当您将S1的对齐属性从“中心”更改为“顶部”时,这些约束(a)不受影响,(b)不重新计算,或(c)重新计算但保持不变,反之亦然。因此,由于自动生成的约束S1不受影响或者在改变对齐属性之后它们根本不改变,因此UI不反映任何改变并且也不存在动画。

相关问题