作为一个现代化的平台, iOS的发展也经历了好几个时代.
本文讲讲iOS写UI的几种主要方式和各自的特点.
在iOS中写UI有多种选择, 大的分类: 使用UIKit还是SwiftUI.
在使用UIKit的情形下, 还根据是否使用storyboard来区分.
注意: 以上的几种方式在项目里可能是混合使用的, 所以建议都了解.
UIKit是苹果官方的framework, 其中包含了UI组件和各种基础设施支持, 是传统的iOS开发离不开的一套类库.
UIViewController就属于UIKit.
我们新建的项目, 如果不选SwiftUI, 都会带一个main storyboard.
用Storyboard写UI大致分为这几步:
Cmd + Shift + L
可以呼出菜单. 可以添加View或者新的View Controller.Ctrl + 拖拽
生成outlet(用于控制控件本身属性)或者action(控件的点击事件).(这一步也不是必须这样做, 也可以先手写出outlet代码, 然后拖拽连起来.)
优点:
缺点: 因为代码是一个xml文件中track, 在团队合作容易产生不好解决的冲突.
首先, 在loadView()
中设置view:
override func viewDidLoad() {
super.viewDidLoad()
view = UIView()
view.backgroundColor = .white
}
然后不断地addSubview()
进去.
其中子view可以是controller中声明的字段:
var myLabel: UILabel!
这里加上感叹号有kotlin中类似lateinit的作用, 否则会提示controller没有init方法.
之后再添加Constraints.
优点: 都用代码写, 历史清晰, 冲突好解决.
缺点: 要用代码写约束; 写起来比较啰嗦; 运行之后才能看到实际的效果.
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()
}
}
优点:
缺点:
作者: 圣骑士Wind
出处: 博客园: 圣骑士Wind
Github: https://github.com/mengdd
微信公众号: 圣骑士Wind
参与评论