使用Xcode预览快速查看应用程序界面

2,745 阅读4分钟

[原文地址](mp.weixin.qq.com/s?__biz=Mzg…

在应用程序开发过程中,设计和调整界面是一个重要的环节。为了更高效地进行界面设计和开发,苹果在Xcode 15中引入了预览功能,让开发者能够通过代码对应用程序的视图进行更改,并在预览画布中即时查看这些更改的结果。

然而,在Xcode 16中,苹果进一步优化了预览功能,为开发者提供了更强大的工具和功能来提升开发体验。下面我们来一起探索一下Xcode 16中增强的预览功能吧!

如何显示预览视图

当你在Xcode中创建一个视图时,你可以在预览画布中显示它。预览画布展示了你的视图在不同设备的各种配置下的显示情况;

截屏2024-07-18 20.49.34.png Swift预览宏是一段代码片段,用于创建和配置你的视图。你可以使用其中一个预览宏,例如Preview(_:body:),告诉Xcode要显示什么内容。要手动显示或隐藏预览画布,请在Xcode菜单中选择"Editor > Canvas"。

class WeatherViewController: UIViewController {
    // ...
}


// A UIKit UIViewController preview.
#Preview {
    let viewController = WeatherViewController()
    viewController.title = "Current Weather"
    return viewController
}


class WeatherView: UIView {
    var icon: UIImage?
}


// A UIKit UIView preview.
#Preview {
    let view = WeatherView()
    if let image = UIImage(systemName: "sun.max.fill") {
        view.icon = image
    }
    return view
}

与预览视图的交互模式

实时模式

当你在实时模式下与预览视图进行交互,就像在设备或模拟器上来展现和操作你的视图一样。使用该预览模式来测试控制逻辑、动画、文本输入以及对异步代码的响应。 截屏2024-07-18 20.04.01.png

选择模式

在选择模式下,预览会显示视图的快照,以便您可以在画布中与视图的UI元素进行交互。在预览中选择一个控件会突出显示源代码编辑器中相应的代码行。双击某些文本视图,例如标签(Label),会将焦点移动到源代码编辑器,以便您可以快速进行更改。 截屏2024-07-18 20.06.58.png

控制预览的显示方式

  1. 可以使用设备设置来控制预览在特定设备上的显示方式。例如,要查看您的视图在暗黑模式、横竖屏和超大文本下的外观;

截屏2024-07-18 20.10.43.png

  1. 还可以使用变体模式(Variant mode)可以查看你的视图在给定配置的不同变体下的外观。 17213053595690.png
  • 以下是预览画布支持的几种常用变体:
    • 颜色模式变体:预览画布提供了浅色和深色两种颜色模式的预览。
    • 方向变体:预览画布可显示你的视图在各种纵向和横向方向的外观。
    • 动态类型变体:预览画布支持以应用程序的所有辅助功能文本大小显示视图。

通过利用设备的设置功能和变体模式,你可以更全面地测试和优化你的视图,以确保其在不同设备、颜色方案和辅助功能设置下都能以最佳方式呈现给用户。这有助于提升你的应用程序的可用性和用户体验质量。

使用代码来配置预览

除了Xcode提供的预览选项之外,您还可以以代码方式自定义和配置要重复使用的预览。

例如,您可以为每个预览添加一个名称,以便更容易跟踪每个预览显示的内容。当您将预览的名称作为字符串传递给预览宏时,该名称将显示在预览画布中预览的标题中。

#Preview("2x2 Grid Portrait") {
   Content()
}

还可以通过将一个或多个配置特性作为可变参数列表传递给预览宏,来控制预览的显示方式。例如,要在左横向方向中显示您的视图,请通过将landscapeLeft类型属性传递给init(_:traits:body:)预览初始化器,告诉Xcode要显示的方向。

#Preview("Camera setting sunning day", traits: .landscapeLeft) {
    let viewController = CameraViewController()
    if let image = UIImage(systemName: "sun.max.fill") {
        viewController.lastImage = image
    }
    return viewController
}

总结

在创建视图时,只传递视图显示所需的数据,避免传递获取数据的对象;对象会使设置视图预览变得更复杂且性能较差。

相反,使用视图所需的最少数据创建视图,优先选择简单的不可变数据类型。以这种方式创建视图可以更轻松地测试和预览视图,并使其性能更好。