以编程方式更改 UIStackView 的对齐方式无法正常工作
programmatically change the aligment of a UIStackView does not work properly
我有:
这是我的视图层次结构:
- 一个名为 b1 的按钮,它有一个名为 "changeAlignment" 的动作,该动作在触摸 Up Inside 时被激活。
- 一个名为 Pview 的 UIView,带有框架 (0,100,414,100)。
- 名为 S1 的水平 UIStackView,对齐 属性 设置为 "center"。此 stackView 已固定到 pView 的边框。
- 一个名为 S2 的水平 UIStackView,对齐 属性 设置为 "Fill" 并且内部有两个标签。
我想做的事情:
我想在触摸按钮 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 不会反映任何更改,也没有动画。如果有人想出另一种解释,请告诉我。
我有:
这是我的视图层次结构:
- 一个名为 b1 的按钮,它有一个名为 "changeAlignment" 的动作,该动作在触摸 Up Inside 时被激活。
- 一个名为 Pview 的 UIView,带有框架 (0,100,414,100)。
- 名为 S1 的水平 UIStackView,对齐 属性 设置为 "center"。此 stackView 已固定到 pView 的边框。
- 一个名为 S2 的水平 UIStackView,对齐 属性 设置为 "Fill" 并且内部有两个标签。
- 名为 S1 的水平 UIStackView,对齐 属性 设置为 "center"。此 stackView 已固定到 pView 的边框。
我想做的事情:
我想在触摸按钮 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 不会反映任何更改,也没有动画。如果有人想出另一种解释,请告诉我。