ios - sendSubviewToBack 和 bringSubviewToFront 导致根视图控制器的子视图向上移动并被导航栏重叠
ios - sendSubviewToBack and bringSubviewToFront causes subviews of root view controller to move up and be overlapped by navigation bar
我的 sendSubviewToBack 和 bringSubviewToFront 调用有问题。我以编程方式使用其他几个元素(如按钮和标签)创建 UIImageView 和 ScrollView(在情节提要中仅创建 ScrollView)。 UIImageView 必须持有背景图像。 ScrollView 和 UIImageView 添加为视图控制器的子视图(其他元素是滚动视图的子视图)。创建 UIImageView 并像这样设置图像后,我调用
self.backgroundImage = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height)];
[self.backgroundImage setImage:[UIImage imageNamed:@"chooseDoctorBackground"]];
[self.view addSubview:self.backgroundImage];
[self.view sendSubviewToBack:self.backgroundImage];
之后,滚动视图 "moves up" 并与导航栏重叠(如果我们不调用 sendSubviewToFront 则不会发生)。有一个简单的解决方法——只需明确定义 UIImageView 和 UIScrollView 的位置(使用 setFrame)并考虑导航栏和状态栏高度。但是,我不明白这种行为的根本原因。你能给我解释一下吗?
提前致谢!
我来这里寻求类似问题的帮助,后来找出了我们两个问题的原因:
当 UIScrollView 是您视图的最后一个子视图时,iOS 将自动填充 UIScrollView 的内容以说明状态栏和导航栏。这就是为什么您的滚动视图的内容一开始看起来很好。
当你打电话时
[self.view sendSubviewToBack:self.backgroundImage];
您的 UIImageView 成为最后面的子视图,并且 UIScrollView 不再自动填充。这就是 UIScrollView 的内容在导航栏下方向上移动的原因。
您需要手动设置滚动视图的框架或内容偏移量以考虑状态栏和导航栏,以支持显示在后面的背景视图。
(根据我的经验,即使滚动视图的 y 原点不为零并且它位于屏幕下方,离状态栏或导航栏不远,UIScrollView 上的这种自动填充行为也会发生。)
我的 sendSubviewToBack 和 bringSubviewToFront 调用有问题。我以编程方式使用其他几个元素(如按钮和标签)创建 UIImageView 和 ScrollView(在情节提要中仅创建 ScrollView)。 UIImageView 必须持有背景图像。 ScrollView 和 UIImageView 添加为视图控制器的子视图(其他元素是滚动视图的子视图)。创建 UIImageView 并像这样设置图像后,我调用
self.backgroundImage = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height)];
[self.backgroundImage setImage:[UIImage imageNamed:@"chooseDoctorBackground"]];
[self.view addSubview:self.backgroundImage];
[self.view sendSubviewToBack:self.backgroundImage];
之后,滚动视图 "moves up" 并与导航栏重叠(如果我们不调用 sendSubviewToFront 则不会发生)。有一个简单的解决方法——只需明确定义 UIImageView 和 UIScrollView 的位置(使用 setFrame)并考虑导航栏和状态栏高度。但是,我不明白这种行为的根本原因。你能给我解释一下吗?
提前致谢!
我来这里寻求类似问题的帮助,后来找出了我们两个问题的原因:
当 UIScrollView 是您视图的最后一个子视图时,iOS 将自动填充 UIScrollView 的内容以说明状态栏和导航栏。这就是为什么您的滚动视图的内容一开始看起来很好。
当你打电话时
[self.view sendSubviewToBack:self.backgroundImage];
您的 UIImageView 成为最后面的子视图,并且 UIScrollView 不再自动填充。这就是 UIScrollView 的内容在导航栏下方向上移动的原因。
您需要手动设置滚动视图的框架或内容偏移量以考虑状态栏和导航栏,以支持显示在后面的背景视图。
(根据我的经验,即使滚动视图的 y 原点不为零并且它位于屏幕下方,离状态栏或导航栏不远,UIScrollView 上的这种自动填充行为也会发生。)