我在IB中创建了UIView
,当我将其添加到UIViewController
中的viewDidLoad
时,视图的背景颜色更改为clearColor
按钮不可点击(他们不接受触摸)。如果我尝试在代码中设置背景颜色没有任何反应。它看起来像这样:
但是,如果我在viewWillAppear
中运行完全相同的代码,它会正常显示,并且可以像这样点击:
代码很简单,是viewDidLoad
中唯一的代码(我已经删除了那里的所有其他代码以查看是否存在问题):
[myView setFrame:CGRectMake(0, 0, 320, 30)];
[self.view addSubview:myView];
我试过调用bringSubviewToFront
但没有做任何事情。有什么想法吗?
其他一些注意事项:
UIView
与视图控制器的主视图位于同一个NIB中,并通过IBOutlet
连接。
NIB文件是与视图控制器分开创建的
初始化调用initWithNibName
。
我在NIB文件中设置了自定义类和视图插座以匹配视图控制器。
关闭NIB文件的
没有故事板
答案 0 :(得分:4)
这里没有足够的信息确切知道,但我的猜测是你的控制器被设置为扩展顶部栏后面的视图。我不相信像topLayoutGuide
等自动布局的内容会在viewDidLoad
之后计算出来。
可能的解决方案:
如果您不需要,请取消选中视图控制器上的“在顶栏下延伸边缘”框。
在viewDidLoad
中添加视图,但将其放在viewDidLayoutSubviews
使用自动布局约束定位myView
,而不是明确设置其框架。
答案 1 :(得分:2)
问题在于,我们在viewDidLoad
添加视图时不知道该怎么做。仅仅知道它在viewWillAppear
中有效是不够的。当它没有出现时,我们必须知道它的状态。为实现这一目标,我提出:
UIView
的提示实现以下(通常是组合)可以帮助诊断常见问题的来源。
nil
?-window
?-hidden
吗?-clipsToBounds
?-alpha
为1-ish。UIView
是否有效?viewDidLoad
,viewWillAppear
,viewDidLayoutSubviews
等)是否与视图混乱?super
等所有位置调用viewDidLoad
?UINavigationController
,UITabBarController
等)?-wantsFullscreenLayout
?-edgesForExtendedLayout
是否有边缘?-translatesAutoresizingMaskIntoConstraints
设置得恰当吗?当他们来找我时,我会添加更多。