我拥有的:
这是我的视图层次结构:
- 名为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],但都没有成功。
我做错了什么??..它怎么可能实际上工作,突然停止工作!!??
有人能帮帮我吗?这简直要把我逼疯了
1条答案
按热度按时间zxlwwiss1#
我认为这个问题的答案与How to programmatically animate the alignment property of an UIStackView in ios 9中的相同。
此行为的解释如下:
1.将水平堆栈视图S1与另一个堆栈视图S2定义为S1的排列子视图,使S1创建一些约束,当您将S1的对齐属性从“中心”更改为“顶部”时,这些约束(a)不受影响,(b)不重新计算,或(c)重新计算但保持不变,反之亦然。因此,由于自动生成的约束S1不受影响或者在改变对齐属性之后它们根本不改变,因此UI不反映任何改变并且也不存在动画。