首页 > 其他分享 >[Android开发学iOS系列] iOS写UI的几种方式

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

时间:2022-10-11 00:13:03浏览次数:52  
标签:UIKit 代码 iOS SwiftUI UI Android View

[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库这么简单.
  • 如何说服团队使用.

标签:UIKit,代码,iOS,SwiftUI,UI,Android,View
From: https://www.cnblogs.com/mengdd/p/ways-to-write-ui-in-iOS.html

相关文章

  • Deep Learning Noob Guide
    DeepLearningNoobGuide1.说明本文主要是对自己入坑deeplearning时的历程做一个简单的总结,并回顾本人承担的2020年集创赛神经网络算法部分的开发任务。时间回到2020......
  • Android投屏工具
    苹果家族的投屏方式十分舒服,但Android投屏到WindowsPC上需借助第三方软件(大都收费,甚至不少是流氓软件)。GitHub上有一个开源项目——scrcpy,使用体验很好。1.投......
  • 关于建造者模式builder的深入思考
    看到的这个build之后还利用switch来case的方法真的眼前一亮。最近我想实现一个builder库,用来将要构建的instance按顺序创建好。不过难点在于怎样设计它们的顺序呢?原本的......
  • [IOS]如何在app里面改变语言
    参考:​​https://stackoverflow.com/questions/9416923/ios-how-to-change-app-language-programmatically-without-restarting-the-app​​核心是使用NSString*path=[......
  • [ios]多个storyboard跳转
    1、单个storyboard跳转UIStoryboard*board=self.storyboard;HomeController*homevc=[boardinstantiateViewControllerWithIdentifier:@"homevc"];......
  • [IOS]如何结合XCODE使用git以及异常处理
    1.控制台cd到项目目录下,输入命令:gitinit 2.在gitserver创建xxx/project_name.git,输入命令:git--bareinit 3.本地控制台:gitadd.gitcommit-m"firstCommit"git......
  • IOS Push notification 摘要
    2.​​registerForRemoteNotificationTypes: is not supported ​​​​in​​​ ​​iOS 8.0 and later.报错​​解决办法可参考:http://stackoverflow.com/questi......
  • Android-Log工具类
    一、Log的基本格式如下为AndroidStudio抓取的一条Log:格式:datetimePID-TID/packagepriority/tag:message例子:2022-09-2119:34:15.29314923-14923/com.lzq.mycu......
  • Linux磁盘相关工具 -- iostat
    iostat主要用于监控系统设备的IO负载情况,根据这个可以看出当前系统的写入量和读取量,CPU负载和磁盘负载。iostat主要用于输出磁盘IO和CPU统计信息。1. iostat用法:iostat......
  • axios完整配置请求数据
    <scripttype="module">importaxiosfrom'./lib/axios.min.js'//axios完整配置请求语法:axios(config)axios({url:'/admin/detail',//url会拼接在......