Ios 在viewDidLoad中调用addSubView时出现异常行为
我已经在IB中创建了一个Ios 在viewDidLoad中调用addSubView时出现异常行为,ios,objective-c,ios7,Ios,Objective C,Ios7,我已经在IB中创建了一个UIView,当我在viewDidLoad中将它添加到我的UIViewController中时,视图的背景颜色更改为clearColor,并且按钮不可点击(它们不会被触摸)。如果我尝试在代码中设置背景色,什么都不会发生。看起来是这样的: 但是,如果我在视图中运行完全相同的代码,它将正常显示,并且可以如下单击: 代码就是这么简单,并且是viewDidLoad中唯一的代码(我已经去掉了其中的所有其他代码,看看这是否是问题所在): 我试着调用将subviewstofront
UIView
,当我在viewDidLoad
中将它添加到我的UIViewController
中时,视图的背景颜色更改为clearColor
,并且按钮不可点击(它们不会被触摸)。如果我尝试在代码中设置背景色,什么都不会发生。看起来是这样的:
但是,如果我在视图中运行完全相同的代码,它将正常显示,并且可以如下单击:
代码就是这么简单,并且是viewDidLoad
中唯一的代码(我已经去掉了其中的所有其他代码,看看这是否是问题所在):
我试着调用将subviewstofront
而没有任何效果。有什么想法吗
还有一些需要注意的事项:
ui视图
与视图控制器的主视图位于同一NIB中,并通过IBOutlet
连接
- NIB文件是与视图控制器分开创建的,并且是
初始化调用
initWithNibName
- 我在NIB文件中设置了自定义类和视图出口,以匹配视图控制器
- NIB文件的自动布局已关闭
- 没有故事板
这里没有足够的信息可以确定,但我猜您的控制器设置为在顶部栏后扩展视图。我不相信像
topLayoutGuide
这样的自动布局会一直计算到viewDidLoad
之后
可能的解决办法:
- 如果不需要,请取消选中视图控制器上的“在顶栏下延伸边”框
- 在
viewdiload
中添加视图,但将其定位在viewdilayoutsubview
- 使用自动布局约束定位
myView
,而不是显式设置其框架
这里没有足够的信息可以确定,但我猜您的控制器设置为在顶部栏后扩展视图。我不相信像
topLayoutGuide
这样的自动布局会一直计算到viewDidLoad
之后
可能的解决办法:
- 如果不需要,请取消选中视图控制器上的“在顶栏下延伸边”框
- 在
viewdiload
中添加视图,但将其定位在viewdilayoutsubview
- 使用自动布局约束定位
myView
,而不是显式设置其框架
这里的问题是,当您在viewDidLoad
中添加视图时,我们不知道发生了什么。仅仅知道它在视图中工作将出现是不够的。当它不出现时,我们必须知道它的状态。为实现这一目标,我提出:
调试ui视图的提示
实现以下功能(通常结合使用)可以帮助诊断常见视图问题的根源
存在
- 设置断点。击中了吗
- 视图是否为非
nil
是否正在将其添加到superview
superview是否为非零
superview是否有-窗口
可见度
- 它是隐藏的吗
- superview
-clipsToBounds
- 把视野放大。你现在能看到吗
- 把它弄大一点。现在呢
- 将其中心设置为superview的中心
- 把它做成鲜绿色
- 确保
-alpha
为1-ish
等级制度
- 视图是一个子类吗?股票
UIView
是否起作用
- 是否有视图类扩展了类别
- 是否有任何视图控制器生命周期方法(
viewdiload
,viewwillbeen
,viewdilayoutsubviews
等)会干扰视图
- 您的视图控制器是否在其应调用的每个位置调用
super
(viewDidLoad
等)
遏制
- 您的视图控制器是否包含在另一个在其上绘制的视图控制器中(例如,
UINavigationController
,UITabBarController
等)
- 您的视图控制器是否为wantsFullscreenLayout
-edgesForExtendedLayout
中是否有边
- 是否可以尝试在容器外部单独渲染视图控制器
自动布局
- 日志/术语中是否存在约束一致性错误
- 您是否设置了宽度/高度(或固有尺寸)
-translatesAutoResizengMaskintoConstraints
设置是否正确
Xcode
- 你清理过你的项目并重建了吗
- 您是否在模拟器中“重置内容和设置…”
- 你在模拟器和设备上都试过了吗
- 您是否已退出Xcode并重新启动它
- 您是否已关闭计算机并重新启动
- 你在测试版吗?别说了
最小可行繁殖
- 如果使用新视图和视图控制器创建新项目,问题是否仍然存在
- 如果你复制并粘贴你的笔尖/故事板
- 如果你复制并粘贴你的类
他们来找我时,我会添加更多。这里的问题是,当您在viewDidLoad
中添加视图时,我们不知道发生了什么。仅仅知道它在视图中工作将出现是不够的。当它不出现时,我们必须知道它的状态。为实现这一目标,我提出:
调试ui视图的提示
实现以下功能(通常结合使用)可以帮助诊断常见视图问题的根源
存在
- 设置断点。击中了吗
- 视图是否为非
nil
是否正在将其添加到superview
superview是否为非零
superview是否有-窗口
可见度
- 它是隐藏的吗
- superview是否<代码
[myView setFrame:CGRectMake(0, 0, 320, 30)];
[self.view addSubview:myView];