SwiftUI 自适应布局

SwiftUI Adaptive Layout

使用 UIKit 写一套能够根据屏幕尺寸和方向自动更换布局的代码是比较麻烦的(至少从我目前的经验来看~),但是用 SwiftUI 来实现就会轻松一点。

在 SwiftUI 中,Apple 引入了一个概念 Size Classes (尺寸类型),且在横向和竖向两个维度上分别有 Horizontal Size ClassVertical Size Class. Size Classes 可进一步分为两种:regular (标准)compact (紧凑). 而设备的 Size Classes 由它的屏幕尺寸和屏幕方向决定,目前常见的设备 Size Classes 如下表所示,

Horizontal Size Class (Width)
Vertical Size Class (Height) Regular (标准) Compact (紧凑)
Regular (标准) iPad Portrait
iPad Landscape
iPhone Portrait
Compact (紧凑) iPhone 6/7/8 Plus
iPhone XR/XS Max
iPhone 11/11 Pro Max/ 12 Pro Max/13 Pro Max
上述机型的 Landscape
iPhone SE/6/7/8
iPhone XS/11 Pro
iPhone 12/12 Pro/13/13 Pro
上述机型的 Landscape

可以看到所有的 iPhone 在竖屏的时候都是 compact 紧凑型,而所有的 ipad 不管是横屏还是竖屏都是 regular 标注型

Usage

利用 SwiftUI 关键词 @Environment 可以监听横屏或者竖屏时的尺寸类型的变化,再根据这个变化来确定布局

@Environment(\.verticalSizeClass) var verticalSizeClass

...

if verticalSizeClass == .compact {
    HSignButtonExtractedView()
} else {
    VSignButtonExtractedView()
}

...
swiftui-adaptive-layout-screenshot

Read more

2025 年度总结

2025 年度总结

今天是 2026 年 1 月 1 号,又是新的一年。这个元旦没有安排出行任务,就在家里休息休息,或者出门溜达溜达。昨天休了一天全薪病假,做了体检,写了年终绩效总结,晚上干了一顿烤肉,没有时间写个人的年度总结。今天起早写写总结。 以下「今年」指 2025 年。 职业发展 算起来,我已经毕业工作四年多了。职业发展整体上还算稳定,没有碰到过糟心事,遇到的领导们也都对我关怀有加。今年又晋升一次,薪资迈上新的台阶。越往上升,越觉得离职业生涯的终点越近,逼迫自己赶紧找个靠谱稳定的副业,到 35 岁没人要的时候能养活自己。 最近两年 AI 大模型的崛起,提高了许多行业的可替代性。码农虽然不是首当其冲的,但危机感已经弥漫在各个论坛博客公共平台上面。没有人能准确预测到未来发展,但做好两手准备是很有必要的。码农不能再只低着头守着自己的键盘和屏幕,也要往外看,接触社会上的各种信息,打破信息壁垒。掌握的信息越多,出路就越多。

By Gray
联通 FTTR 宽带从路由器设置自动重启和穿墙功率

联通 FTTR 宽带从路由器设置自动重启和穿墙功率

几个月前把家里宽带换成了联通的千兆 FTTR 宽带,包含一主一从两个点位。配套光猫设备是华为的星光 F50 尊享版。 主点位放置在客厅茶几上,方便连接电视。从点位放在卧室门口,那里恰好有一个不耽误过路的小拐角可以放路由器。平常我们基本不在客厅活动,其他区域最近的 Wi-Fi 信号源是从路由器,因此我们大多数的设备连接的都是从路由器。从路由器的工作负荷很大。 从路由器个头小主路由器很多,散热不咋地。工作时间久了发热就容易发生数据包堵塞,丢包延迟高。需要把它电源拔掉重启。从宽带开通到现在,数据包堵塞影响网络的情况每个月会发生一次。有一次还影响了居家办公的视频会议。宽带维修师傅也给不出有效的法子,建议就是定期插拔从路由器电源。 从路由器和书房之间隔了两堵墙。信号到我书桌那个位置时,千兆网速已经衰减到只有 400-500Mbps 了,折损将近一半。叠加路由器发热的 debuff,书桌位置的网速最差的时候几乎和百兆宽带差不多。 我尝试过在光猫后台管理将路由器功率设置到「穿墙」模式,但没有任何作用。今天在后台研究了一番发现,原来我之前设置的功率是仅对主路由器生效,从路由器还是标准功率。要修

By Gray