• [Android开发学iOS系列] iOS写UI的几种方式


    [Android开发学iOS系列] iOS写UI的几种方式

    作为一个现代化的平台, iOS的发展也经历了好几个时代.

    本文讲讲iOS写UI的几种主要方式和各自的特点.

    iOS写UI的方式

    在iOS中写UI有多种选择, 大的分类: 使用UIKit还是SwiftUI.

    在使用UIKit的情形下, 还根据是否使用storyboard来区分.

    • UIKit:
      • 用storyboard.也叫Interface Builder.
      • 采用代码来写UI, 手写约束.
    • SwiftUI.

    注意: 以上的几种方式在项目里可能是混合使用的, 所以建议都了解.

    UIKit

    UIKit是苹果官方的framework, 其中包含了UI组件和各种基础设施支持, 是传统的iOS开发离不开的一套类库.
    UIViewController就属于UIKit.

    用Storyboard

    我们新建的项目, 如果不选SwiftUI, 都会带一个main storyboard.

    用Storyboard写UI大致分为这几步:

    • 在Storyboard中添加控件. 用Cmd + Shift + L可以呼出菜单. 可以添加View或者新的View Controller.
    • 设置属性, 约束. (侧面面板, 右下角约束按钮, 以及Ctrl+拖拽生成相对约束).
    • 需要有在代码中的交互:
      • 显示Assistant View之后将对应的ViewController类代码同时显示出来.
      • Ctrl + 拖拽 生成outlet(用于控制控件本身属性)或者action(控件的点击事件).

    (这一步也不是必须这样做, 也可以先手写出outlet代码, 然后拖拽连起来.)

    优点:

    • 图形界面编辑.
    • 可以不用build看到UI预览效果.

    缺点: 因为代码是一个xml文件中track, 在团队合作容易产生不好解决的冲突.

    用代码写View和约束(不用Storyboard)

    首先, 在loadView()中设置view:

    override func viewDidLoad() {
    super.viewDidLoad()
    view = UIView()
    view.backgroundColor = .white
    }

    然后不断地addSubview()进去.

    其中子view可以是controller中声明的字段:

    var myLabel: UILabel!

    这里加上感叹号有kotlin中类似lateinit的作用, 否则会提示controller没有init方法.

    之后再添加Constraints.

    优点: 都用代码写, 历史清晰, 冲突好解决.

    缺点: 要用代码写约束; 写起来比较啰嗦; 运行之后才能看到实际的效果.

    SwiftUI

    SwiftUI是iOS新推出的声明式的写UI的方式, 可以类比Android的Jetpack Compose.

    新建项目以后的Hello World大概长这样:

    App:

    import SwiftUI
    @main
    struct MyApp: App {
    var body: some Scene {
    WindowGroup {
    ContentView()
    }
    }
    }

    ContentView:

    import SwiftUI
    struct ContentView: View {
    var body: some View {
    Text("Hello, world!")
    .padding()
    }
    }
    struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
    ContentView()
    }
    }

    优点:

    • 最新的技术, 符合未来发展的潮流(类比Compose, Flutter, React Native).
    • 使用方便简单, 易上手.
    • Xcode的预览和编辑功能都支持得不错, 可以在属性面板上直接添加或者编辑属性, 有代码自动联动.
    • 可以和UIKit的老代码互操作, 兼容良好.

    缺点:

    • 要求OS版本13及以上.
    • 因为整体的设计思路变为了functional programming, 所以旧代码迁移需要做一些设计方面的思维转换, 并不是替换了一套UI库这么简单.
    • 如何说服团队使用.
  • 相关阅读:
    MySQL如何确定查询处理各个阶段所消耗的时间
    Mockito 如何 mock 静态方法
    代码随想录Day61 | 503. 下一个更大元素 II | 42. 接雨水
    scada组态软件和硬件结构的主要功能
    Java 多线程编程
    C语言指针基础篇
    javascript之dom详细笔记加练习
    不要忽视web渗透测试在项目中起到的重要性
    精品SpringCloud商品服务系统微服务分布式疫情下购物商城
    论文《How to Learn Item Representation for Cold-Start Multimedia Recommendation》阅读
  • 原文地址:https://www.cnblogs.com/mengdd/p/ways-to-write-ui-in-iOS.html