我有一个包含一堆 subview 的 UIScrollView。如果 View 最初以横向或纵向加载,则每个布局都很好。但是,当我尝试处理方向变化时,什么也没有发生。
我认为问题在于 subview 框架正在更新,但没有重新绘制。
我现在正在使用它来设置方向更改的框架:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
int i = 0;
for(UIView *subview in [scroll subviews]) {
if([subview isKindOfClass:[GalleryThumbContainerView class]]) {
[subview setFrame:[self getFrameLandscape:i]];
i++;
} else {
}
}
}
如果设备是纵向的并且我将它旋转成横向,则没有任何 subview 新帧被更新。
如果我将设备保持纵向并离开 View ,则返回时所有新帧都会更新。
这让我相信这是未更新集合的一些问题。我试过:
[self.view setNeedsDisplay];
[self.view setNeedsLayout];
[self.scroll setNeedsDisplay];
[self.scroll setNeedsLayout];
这些都不起作用。
我已经设法“使”它工作:
- 删除 ScrollView 的所有 subview
- 设置所有 subview 的新框架
- 将所有 subview 重新添加回 scrollView
似乎有一种更简洁的方法可以做到这一点。
我还尝试向我的 subview 子类添加方向更改监听器(满嘴),并存储每个 subview 的横向和纵向帧。然后由监听器切换。这也不起作用。
非常感谢您的帮助,感谢您抽出宝贵时间。
最佳答案
for (UIView *view in scrollView.subviews)
{
if ([view isKindOfClass:[UIImageView class]])
{
[view removeFromSuperview];
}
}
关于objective-c - UIScrollView 不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8978925/