Xcode 7离线视图

当使用情节提要板时,Xcode 7在Interface Builder中引入了许多改进。

情节提要参考 ,改进的Unwind SeguesSegue子类化是有用的工具,将有助于使用情节提要构建和维护复杂的应用程序。 有关这些主题的所有详细信息,可以在WWDC 2015的“故事板的新增功能”部分中找到。

在此会话中强调的一项重要的小功能是能够在任何视图控制器的场景基座中添加“脱机视图”。

如果您需要呈现一个仅其容器视图控制器显示后才显示的复杂视图,那么您很可能使用了以下两种方法之一:

  • 在单独的xib文件中定义视图并加载它,如下所示:
 让myView = NSBundle.mainBundle()。loadNibNamed(“ MyViewNib”,所有者:self,选项:nil).first! 如!  UIView 
self.view.addSubview(myView)
  • 将视图定义为容器视图控制器层次结构的一部分,可能使用alpha = 0或在主视图范围之外,然后响应某些事件而显示视图。

使用单独的xib文件方法,我们必须使用上面的代码以编程方式加载视图。 如果需要将IBAction和IBOutlet直接链接到视图控制器,则可以通过将视图控制器类指定为xib文件的文件所有者来实现。 尽管这可行,但它需要几个配置步骤,如果我们可以在其视图控制器旁边看到该视图,并且能够直接链接IBAction和IBOutlet,那就更好了。

所有这些都可以通过将视图直接添加到IB中的视图控制器的层次结构中来完成,但是最终我们可以将多个视图彼此并排堆叠,并且在视觉上由于它们彼此重叠而变得难以使用。

离线视图通过将所有内容保留在同一画布中,同时清楚地显示视图控制器及其离线视图,从而大大提高了故事板的清晰度:

要将离线视图添加到视图控制器,只需将UIView(或子类)拖到视图控制器场景停靠区中,它将显示在其上方。 同样,可以根据需要添加多个脱机视图并将其链接到视图控制器。

新添加的视图可以通过CTRL +拖动到View Controller的源文件中,作为IBOutlet链接:

显示视图

如果编译并运行该应用程序,即使调试器显示已设置了相应的IBOutlet,也将看到该视图不可见。 这是因为离线视图不会自动添加到视图层次结构中。

为了显示视图,我们需要自己添加它(例如,在@IBAction方法内部):

  self.view.addSubview(offlineView) 

如果再次构建并运行,我们将看到该视图出现在主视图的左上角,并且其大小与在“界面”构建器中指定的宽度和高度匹配。

查看尺寸

以上所有都是很棒的-但是如果我们希望离线视图成为与其超级视图范围相匹配的叠加层,该怎么办? 从Xcode 7.0 beta 3开始,无法告诉IB添加后,脱机视图应扩展到容器视图,因此我们需要以编程方式进行此操作。

幸运的是,我们的朋友自动版式可以为您提供帮助。 我们可以编写一个简单的UIView扩展类,以将所有视图锚点约束到其超级视图边缘。 有关如何完成的信息,请参见本要点。

有了这个扩展,我们的视图可以像这样锚定到超级视图的边缘:

  self.view.addSubview(offlineView)//这是我们的@IBOutlet 
offlineView.anchorAllEdgesToSuperview()// UIView扩展方法

警惕的读者会注意到,以编程方式添加约束时,translatesAutoresizingMaskIntoConstraints设置为false。 WWDC 2015的第2部分“自动布局的奥秘”部分对此做了很好的解释。

结论

脱机视图是Interface Builder的重要补充,因为它们使Xcode 7中的UI设计变得更加容易。已添加了许多重要功能,以帮助我们开发人员在Interface Builder中使用Storyboard,并且WWDC的相关会议对此进行了详细介绍。

注意 :此故事 最初于 2015年7月7日 发布在我的博客 上。

有关更多此类故事,请 订阅我的邮件列表

如果您喜欢,请单击下面的so,以便其他人在中此看到此内容。