UIStackView 竞争条件?
UIStackView race condition?
我有一个嵌套的 UIStackView,当我按下一个按钮时,它会被实例化。为了更详细地说明,我有一个 UIStackView,它遍历一个充满 CustomUIStackView 的 NSMutableArrayList,并将它们添加为 arrangedSubview。当 CustomUIStackViews 启动时,它们还遍历自己的 NSMutableArrayList,其中填充了 UIViews 并将它们添加为 arrangedSubviews。
奇怪的是,在执行完所有 for 循环后,我有一个 NSLog:
NSLog(@"parentstackview height is %f",_parentStackView.frame.size.height);
which returns a 0(它不应该,高度应该是 1861 在所有堆栈视图出现后,他们在模拟器中明显地显示)。
但是如果我创建这个方法:
- (void)testMethod{
NSLog(@"parentstackview height is %f",_parentStackView.frame.size.height);
}
并将之前的 NSLog 替换为:
[self performSelector:@selector(testMethod) withObject:nil afterDelay:1.0];
然后它 returns 1861 完全像它应该的那样,在 1 秒延迟之后。
为什么 1 秒的延迟会有所不同?
布局传递可能不是在您的代码中完成的,而是稍后在 运行 循环中处理的,这说明了不同的值。
如果您在实例化嵌套堆栈视图的同一代码中需要大小,则需要调用 layoutIfNeeded()
立即布局所有子视图。
您不会在 UIStackView
文档中找到这些详细信息,因为它记录在布局子视图下的堆栈视图的超类 UIView class reference 中。
我有一个嵌套的 UIStackView,当我按下一个按钮时,它会被实例化。为了更详细地说明,我有一个 UIStackView,它遍历一个充满 CustomUIStackView 的 NSMutableArrayList,并将它们添加为 arrangedSubview。当 CustomUIStackViews 启动时,它们还遍历自己的 NSMutableArrayList,其中填充了 UIViews 并将它们添加为 arrangedSubviews。
奇怪的是,在执行完所有 for 循环后,我有一个 NSLog:
NSLog(@"parentstackview height is %f",_parentStackView.frame.size.height);
which returns a 0(它不应该,高度应该是 1861 在所有堆栈视图出现后,他们在模拟器中明显地显示)。
但是如果我创建这个方法:
- (void)testMethod{
NSLog(@"parentstackview height is %f",_parentStackView.frame.size.height);
}
并将之前的 NSLog 替换为:
[self performSelector:@selector(testMethod) withObject:nil afterDelay:1.0];
然后它 returns 1861 完全像它应该的那样,在 1 秒延迟之后。
为什么 1 秒的延迟会有所不同?
布局传递可能不是在您的代码中完成的,而是稍后在 运行 循环中处理的,这说明了不同的值。
如果您在实例化嵌套堆栈视图的同一代码中需要大小,则需要调用 layoutIfNeeded()
立即布局所有子视图。
您不会在 UIStackView
文档中找到这些详细信息,因为它记录在布局子视图下的堆栈视图的超类 UIView class reference 中。