Ios 在viewDidLoad中调用addSubView时出现异常行为

Ios 在viewDidLoad中调用addSubView时出现异常行为,ios,objective-c,ios7,Ios,Objective C,Ios7,我已经在IB中创建了一个UIView,当我在viewDidLoad中将它添加到我的UIViewController中时,视图的背景颜色更改为clearColor,并且按钮不可点击(它们不会被触摸)。如果我尝试在代码中设置背景色,什么都不会发生。看起来是这样的: 但是,如果我在视图中运行完全相同的代码,它将正常显示,并且可以如下单击: 代码就是这么简单,并且是viewDidLoad中唯一的代码(我已经去掉了其中的所有其他代码,看看这是否是问题所在): 我试着调用将subviewstofront

我已经在IB中创建了一个
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];