我有什么:
这是我的观点层次结构:
我想做什么:
我想改变S1与#34; Center"的对齐方式。 to" Top"当我触摸按钮b1时。
我尝试了什么
- (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],但这些都没有用。
我做错了什么?..它甚至有可能实际工作并突然停止工作!! ??
任何人都可以帮助我吗?......这让我发疯了。
答案 0 :(得分:0)
我认为这个答案与How to programmatically animate the alignment property of an UIStackView in ios 9中的答案相同。
此行为的解释如下:(1)stackView自动生成所需的约束以布置其排列的子视图,(2)将另一个stackView S2定义为水平堆栈视图S1作为S1的排列子视图,使S1创建一些约束(a)不受影响,(b)不重新计算或(c)重新计算但保持不变,当您将S1的对齐属性从中心更改为顶部时,反之亦然。因此,由于自动生成的约束S1不会受到影响,或者在更改对齐属性后根本不会更改,因此UI不会反映任何更改,也没有动画。如果有人想出另一个解释让我知道。