[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.
注意: 以上的幾種方式在項目里可能是混合使用的, 所以建議都了解.
UIKitUIKit是蘋果官方的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.
優點: 都用代碼寫, 歷史清晰, 沖突好解決.
缺點: 要用代碼寫約束; 寫起來比較啰嗦; 運行之后才能看到實際的效果.
SwiftUISwiftUI是iOS新推出的聲明式的寫UI的方式, 可以類比Android的Jetpack Compose.
【[Android開發學iOS系列] iOS寫UI的幾種方式】新建項目以后的Hello World大概長這樣:
App:
import SwiftUI@mainstruct MyApp: App {var body: some Scene {WindowGroup {ContentView()}}}ContentView:
import SwiftUIstruct 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庫這么簡單.
  • 如何說服團隊使用.

    推薦閱讀