我遇到sendSubviewToBack和bringSubviewToFront调用的问题。我使用programmaticaly创建了UIImageView和ScrollView以及其他几个元素(如按钮和标签)(只在故事板中创建了ScrollView)。 UIImageView必须保存背景图像。 ScrollView和UIImageView被添加为视图控制器的子视图(其他元素是scrollview的子视图)。在我创建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];
之后,滚动视图“向上移动”并被导航栏重叠(如果我们不调用sendSubviewToFront则不会发生这种情况)。有一个简单的解决方法 - 只需在考虑导航栏和状态栏高度的情况下明确定义UIImageView和UIScrollView的位置(使用setFrame)。但是,我不明白这种行为的根本原因。你能解释一下吗?
提前致谢!
答案 0 :(得分:2)
我来到这里寻找类似问题的帮助,并且已经找出了我们两个问题的原因:
当UIScrollView是您视图的最后面的子视图时,iOS会自动填充UIScrollView的内容以考虑状态栏和导航栏。这就是为什么您的滚动视图的内容最初显示正常。
致电时
[self.view sendSubviewToBack:self.backgroundImage];
您的UIImageView成为最后面的子视图,UIScrollView不再自动填充。这就是为什么UIScrollView的内容在导航栏下方向上移动的原因。
您需要手动设置滚动视图的框架或内容偏移量以考虑状态和导航栏,以支持背后出现的背景视图。
(根据我的经验,即使滚动视图的y原点非零并且它位于屏幕下方,在状态或导航栏附近,也会发生UIScrollView上的自动换行为。)