• 今年的iOS 26都解决了开发者哪几个最头疼的老大难问题?
  • 发布于 1天前
  • 16 热度
    0 评论
  • 柠檬酸
  • 13 粉丝 59 篇博客
  •   
前言
每年 WWDC,SwiftUI 都会带来一堆新玩意儿。今年 iOS 26 虽然更新不算"地震级",但却精准解决了开发者最头疼的几个老大难问题。什么 WebView、TextEditor 富文本、List 索引、@Animatable 宏……这些功能终于不用再"降级"到 UIKit 了,SwiftUI 党可以狠狠松一口气。说实话,作为一个天天写 SwiftUI 的码农,我第一时间升级 Xcode 26,体验了一圈新 API。发现今年的更新虽然"量不大",但"质"真地很高。特别是那个 WebView 组件,我等了好几年了!终于不用写那些恶心的 UIViewRepresentable 包装代码了。

下面就带你快速盘点 iOS 26 SwiftUI 的那些新特性,顺便聊聊开发者该咋优雅地拥抱 Liquid Glass 时代。

WebView 终于原生了,再也不用包 UIKit
以前想在 SwiftUI 里嵌入网页,必须用 UIViewRepresentable 包一层 WKWebView,写起来又臭又长。我记得之前做一个项目,光是为了显示个网页,就写了 100 多行代码,还得处理各种生命周期问题,简直要命。现在好了,iOS 26 直接内置了 WebView 组件,三行代码就能搞定网页展示:
WebView(url: URL(string: "https://www.apple.com")!)
    .navigationTitle("苹果官网")

交互、回调都很丝滑,再也不用和 UIKit 打交道。对于那些需要内嵌 H5 页面的 App 来说,这个功能简直是救星。我昨天试了试,确实比以前舒服太多了。

TextEditor 富文本编辑
TextEditor 这次支持富文本了!你可以直接用 AttributedString 设置样式,支持加粗、斜体、下划线、颜色、图片等,编辑体验大幅提升。以前想做个富文本编辑器,得自己拼 NSAttributedString,兼容性一塌糊涂。我之前做过一个笔记 App,光是处理富文本就花了两个月,各种边界情况让人头大。那时候每天调试到半夜,差点秃头...
现在官方一把梭:
@State private var text: AttributedString = "Hello, SwiftUI!"

TextEditor(text: $text)
    .font(.body)
    .foregroundColor(.primary)
再也不用羡慕安卓富文本了,iOS 26 这波真地很香。特别是对于那些做内容创作类 App 的开发者,这个功能简直是及时雨。

List 支持 Section 索引,长列表终于能优雅跳转
做通讯录、城市选择器这种长列表,最头疼的就是没有索引条。用户要找个城市,得滑半天才能找到,体验特别差。iOS 26 终于给 List 加上了 sectionIndexTitles,用户可以像原生通讯录一样,快速跳转到指定分组:
List {
    ForEach(groupedData, id: \.title) { section in
        Section(section.title) {
            ForEach(section.items) { item in
                Text(item.name)
            }
        }
    }
}
.sectionIndexTitles(groupedData.map { $0.title })

体验直接拉满,再也不用自己造轮子,官方支持就是稳。这下终于可以跟产品经理说"我们也有索引条了"

@Animatable 宏,让动画效果更丝滑
今年 SwiftUI 推出了 @Animatable 宏,让自定义动画变得超级简单。以前想做个复杂动画,得 conform Animatable 协议,还要实现一堆方法,写得我头都大了。现在加个宏就行:
@Animatable
struct CustomView: View {
    var progress: Double
    
    var body: some View {
        // 动画会自动插值
        Rectangle()
            .scaleEffect(progress)
    }
}
动画效果更自然,代码也更简洁。对于那些追求极致用户体验的 App,这个功能特别有用。我试了几个动画,确实比以前丝滑不少。

openURL 支持内嵌浏览器,用户不再流失
openURL 现在可以直接在 App 内弹出浏览器,不用跳出 App,用户体验更好,转化率也更高。以前用户点击链接就跳到 Safari 了,很多时候就回不来了,运营同学天天跟我抱怨转化率低。现在可以这样:
struct ContentView: View {
    @Environment(\.openURL) var openURL
    var body: some View {
        VStack {
            Button("查看详情") {
                openURL(URL(string: "https://apple.com")!, prefersInApp: true)
            }
        }
        .padding()
    }
}
对于电商、内容类 App 来说,这个功能能有效减少用户流失。

Liquid Glass 适配,别急着全量升级
今年最大的 UI 变化就是 Liquid Glass 设计语言。苹果的建议是开发者别着急,等到 beta 4 或 5 再大规模适配。如果你不想立刻适配新设计,可以在 Info.plist 中加这个配置:
<key>UIDesignRequiresCompatibility</key>
<true/>
这样你的 App 会继续使用老设计,给自己留点缓冲期。不过这个选项在 Xcode 27 会被移除,所以最多能拖一年。说白了就是苹果给的"后悔药",吃一年就没了。建议大家先观望几轮 beta,等 API 稳定了再动手。毕竟界面大改版,肯定会有各种意想不到的坑。想想当年 iOS 7 的血泪史,还是稳一点好...

TabView 和 ScrollView 的新玩法
iOS 26 还为 Liquid Glass 界面专门优化了一些组件:
TabView 滚动时自动最小化:
// 堆代码 duidaima.com
TabView {
    // tabs
}
.tabViewStyle(.minimizeOnScroll)
ScrollView 边缘效果调整:
ScrollView {
    // content
}
.scrollEdgeEffect(.custom)
这些细节调整让 App 更符合 Liquid Glass 的设计理念,但说实话,适配工作量还是不小的。

还有哪些遗憾?
虽然 SwiftUI 越来越强,但还是有些遗憾,这些功能依然缺失:
1.相机图片导入
2.二维码/条形码扫描
3.AsyncImageView 缓存控制
4.@AppStorage 支持 iCloud 同步
5.摇一摇手势检测
6.Keychain 数据读写
这些功能依然需要用 UIKit 或第三方库补齐。每次遇到这些需求,还是得回到 UIKit 的怀抱,有点无奈。希望明年的 iOS 27 能把这些坑都填上。

SwiftData 还是那个 SwiftData...
说到遗憾,不得不提 SwiftData。从发布到现在,各种 bug 层出不穷,性能也不如人意。我之前有个项目用了 SwiftData,结果各种奇怪的崩溃,最后还是换回了 Core Data。很多开发者还是更愿意用 Core Data,至少稳定性有保障。希望苹果能在 SwiftData 上多花点心思,别让这个本来很有潜力的框架继续摆烂下去。

写在最后
iOS 26 SwiftUI 的更新,虽然没有"颠覆性",但每一项都很实用。WebView、富文本、索引条这些小细节,才是开发者最关心的刚需。Liquid Glass 设计虽然让人头大,但也意味着新的机会和挑战。苹果这次算是给了我们一年的适配期,比当年 iOS 7 的"突然袭击"要人性化多了。说实话,作为一个写了这么多年 SwiftUI 的开发者,看到这些功能终于原生支持,还是挺激动的。虽然适配工作又要忙一阵子,但能让用户体验更好,这些辛苦都是值得地。

你最期待哪个新特性?WebView、富文本,还是那个期待已久的 List 索引?评论区聊聊呗!我先去研究研究新 API,看看还有啥好玩的...
用户评论