UIViews 重叠,即使设置原点和大小以保持它们分开
Posted
技术标签:
【中文标题】UIViews 重叠,即使设置原点和大小以保持它们分开【英文标题】:UIViews overlap even when setting origin and size to keep them separate 【发布时间】:2015-10-20 16:22:48 【问题描述】:我正在尝试设计一个汉堡菜单,这意味着导航角左上角的一个小按钮,当按下该按钮时,左侧会显示一个菜单,并在右侧保留部分可见的原始视图。
但是,在我的代码中,我无法正确定位两个视图(汉堡菜单视图和主视图),并且它们重叠。这是我在viewDidLoad()
中所做的事情。
CGRect frame = self.containerView.bounds;
int widthForHamburgerVC = 150;
CGRect hamburgerVCFrame = frame;
hamburgerVCFrame.size.width = widthForHamburgerVC;
hamburgerVCFrame.origin.x = 0;
self.hamburgerVC.view.frame = hamburgerVCFrame;
self.hamburgerVC.view.bounds = hamburgerVCFrame;
CGRect mainVCFrame = self.containerView.bounds;
mainVCFrame.origin.x = widthForHamburgerVC;
self.mainVC.view.frame = mainVCFrame;
[self.containerView addSubview:self.mainVC.view];
[self.containerView addSubview:self.hamburgerVC.view];
containerView
是占据整个屏幕的视图。因此,从代码来看,意图是让 hamburgerVC 视图从 x = 0 开始,宽度为 150 个单位,而 mainVC 视图从 x = 150 开始,并具有通常的宽度。不应该有任何重叠,但它看起来像这样。
红色汉堡包视图与主视图重叠。两个视图之间大约有 50 个单位重叠,我无法解释。我尝试设置断点并检查两个视图的宽度和 x 坐标,结果符合预期(汉堡视图:x = 0,宽度 = 150。主视图:x = 150,宽度 = 320)。
是否有人发现设置这些视图的代码有任何问题?两者都启用了自动布局。
【问题讨论】:
尝试在 viewWillAppear 中进行。您永远不应该在 viewDidLoad 中对子视图进行任何布局,因为尚未(始终)设置框架。 【参考方案1】:如果您使用自动布局,则应避免指定框架。您应该通过更改约束来调整视图。您可以在代码中为您的约束创建出口并指定更改,然后在约束更新的视图上调用 layoutIfNeeded 方法。
【讨论】:
以上是关于UIViews 重叠,即使设置原点和大小以保持它们分开的主要内容,如果未能解决你的问题,请参考以下文章
如果我的 UIViews 边框颜色 alpha 小于 1.0,如何避免颜色重叠?