polish(ios): 中性化标签与方向胶囊并收紧详情头部间距
- AITag 拆为两类:不传状态色时是中性归类胶囊(tile 底、发丝描边、墨字,可带 10pt 图标), 传状态色时才用 14% 色雾与 30% 描边。颜色只服务状态语义。 - 详情页标签改用 AITag(tag, systemImage: "tag"),与节点卡片同一枚形状;头部 VStack 间距 14 -> 12,读数格 minHeight 62 -> 56,加载完成后不再明显小于下方卡片。 - 消息中心「收件 / 发件」由绿/墨配色改回中性胶囊配 arrow.down.left / arrow.up.right, 绿色重新只表示健康状态。 - 批量标签表在无勾选时给出「先在节点列表勾选要归类的节点」,不再留空白行。 - 文档:0.2.2 增量记录与校验值更新为 0e4ffb74…;版本号后不再带括号, 0.2.0/0.2.1/0.2.2 与 README、现行说明统一改写为「0.2.x 构建 N」。
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
|
||||
## iOS Native 应用
|
||||
|
||||
`apps/ios` 提供不依赖 8788 控制台的原生 iPhone 应用,当前版本 **0.2.2**(build 7),运行在 iOS 16 及以上,产物为未签名 IPA,供 TrollStore 或自有签名流程安装。iOS 开发在 `ios-native-ipa` 分支进行。
|
||||
`apps/ios` 提供不依赖 8788 控制台的原生 iPhone 应用,当前版本 **0.2.2**,构建号 7,运行在 iOS 16 及以上,产物为未签名 IPA,供 TrollStore 或自有签名流程安装。iOS 开发在 `ios-native-ipa` 分支进行。
|
||||
|
||||
底部为节点、消息、设置三个入口:
|
||||
|
||||
|
||||
@@ -105,7 +105,7 @@ struct InstanceDetailView: View {
|
||||
|
||||
private var headerCard: some View {
|
||||
AICard(padding: 16, emphasis: true) {
|
||||
VStack(alignment: .leading, spacing: 14) {
|
||||
VStack(alignment: .leading, spacing: 12) {
|
||||
// 导航栏已经显示实例名,卡片内不再重复,只留地址与状态。
|
||||
HStack(spacing: 8) {
|
||||
Image(systemName: "globe")
|
||||
@@ -128,10 +128,11 @@ struct InstanceDetailView: View {
|
||||
|
||||
moduleAvailability
|
||||
|
||||
if !model.instance.tags.isEmpty {
|
||||
// 与节点卡片同一枚标签形状(同一胶囊、同一图标),两处只有一处能点。
|
||||
if model.instance.tags.isEmpty == false {
|
||||
FlowLayout(spacing: 7) {
|
||||
ForEach(model.instance.tags, id: \.self) { tag in
|
||||
AITag(tag)
|
||||
AITag(tag, systemImage: "tag")
|
||||
}
|
||||
}
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
@@ -490,7 +491,7 @@ struct InstanceDetailView: View {
|
||||
.frame(height: 4)
|
||||
}
|
||||
}
|
||||
.frame(maxWidth: .infinity, minHeight: 62, alignment: .topLeading)
|
||||
.frame(maxWidth: .infinity, minHeight: 56, alignment: .topLeading)
|
||||
.accessibilityElement(children: .combine)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,11 +47,17 @@ struct FleetTagBatchSheet: View {
|
||||
AICard {
|
||||
VStack(alignment: .leading, spacing: 10) {
|
||||
AISectionTitle("已选 \(targets.count) 台", systemImage: "checklist")
|
||||
Text(selectedNames.joined(separator: "、"))
|
||||
.font(.caption)
|
||||
.foregroundStyle(AITheme.muted)
|
||||
.lineLimit(3)
|
||||
.truncationMode(.tail)
|
||||
if targets.isEmpty {
|
||||
Text("先在节点列表勾选要归类的节点。")
|
||||
.font(.caption)
|
||||
.foregroundStyle(AITheme.muted)
|
||||
} else {
|
||||
Text(selectedNames.joined(separator: "、"))
|
||||
.font(.caption)
|
||||
.foregroundStyle(AITheme.muted)
|
||||
.lineLimit(3)
|
||||
.truncationMode(.tail)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -134,7 +134,7 @@ struct MessagesView: View {
|
||||
.layoutPriority(1)
|
||||
AITag(
|
||||
message.direction.label,
|
||||
tint: message.direction == .outgoing ? AITheme.primary : AITheme.success)
|
||||
systemImage: message.direction == .outgoing ? "arrow.up.right" : "arrow.down.left")
|
||||
Spacer(minLength: 8)
|
||||
Text(TimestampText.short(message.timestamp))
|
||||
.font(.caption2.weight(.medium))
|
||||
|
||||
@@ -47,29 +47,42 @@ extension AICard {
|
||||
|
||||
public struct AITag: View {
|
||||
private let text: String
|
||||
private let tint: Color
|
||||
private let tint: Color?
|
||||
private let systemImage: String?
|
||||
|
||||
public init(_ text: String, tint: Color = AITheme.primary) {
|
||||
/// 不传 `tint` 时是中性归类标签(标签、方向这类不带健康含义的信息),
|
||||
/// 传了 `tint` 才是状态标签,用同色色雾与描边。颜色只留给后者。
|
||||
public init(_ text: String, tint: Color? = nil, systemImage: String? = nil) {
|
||||
self.text = text
|
||||
self.tint = tint
|
||||
self.systemImage = systemImage
|
||||
}
|
||||
|
||||
public var body: some View {
|
||||
Text(text)
|
||||
.font(.caption2.weight(.semibold))
|
||||
.foregroundStyle(tint)
|
||||
.lineLimit(1)
|
||||
.truncationMode(.middle)
|
||||
.padding(.horizontal, 10)
|
||||
// 与节点卡片上的标签胶囊同一形状,同一高度;深色底上 10% 色雾几乎看不见,
|
||||
// 所以描边权重必须够,不能让标签在暗色主题里消失。
|
||||
.frame(height: 28)
|
||||
.background(tint.opacity(0.14))
|
||||
.clipShape(Capsule(style: .continuous))
|
||||
.overlay {
|
||||
Capsule(style: .continuous)
|
||||
.strokeBorder(tint.opacity(0.30))
|
||||
let tint = self.tint
|
||||
HStack(spacing: 4) {
|
||||
if let systemImage {
|
||||
Image(systemName: systemImage)
|
||||
.font(.system(size: 10, weight: .semibold))
|
||||
.accessibilityHidden(true)
|
||||
}
|
||||
Text(text)
|
||||
.font(.caption2.weight(.semibold))
|
||||
.lineLimit(1)
|
||||
.truncationMode(.middle)
|
||||
}
|
||||
.padding(.horizontal, 10)
|
||||
// 与节点卡片上的标签胶囊同一形状,同一高度;深色底上 10% 色雾几乎看不见,
|
||||
// 所以描边权重必须够,不能让标签在暗色主题里消失。
|
||||
.frame(height: 28)
|
||||
.foregroundStyle(tint == nil ? AITheme.ink : tint!)
|
||||
.background(tint.map { $0.opacity(0.14) } ?? AITheme.tile)
|
||||
.clipShape(Capsule(style: .continuous))
|
||||
.overlay {
|
||||
Capsule(style: .continuous)
|
||||
.strokeBorder(tint.map { $0.opacity(0.30) } ?? AITheme.tileLine)
|
||||
}
|
||||
.accessibilityLabel(text)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ MultiSimAdmin 0.2.0 是面向 iPhone 的原生 IPA 版本。应用直接连接
|
||||
- `build/ipa/MultiSimAdmin.ipa`
|
||||
- `build/ipa/MultiSimAdmin.ipa.sha256`
|
||||
|
||||
0.2.0 (3) 校验值:
|
||||
0.2.0 构建 3 校验值:
|
||||
|
||||
```text
|
||||
1ddba7399d74705a7d31835dc6dff30c3b2fc3b3cada23c68eaa84a8fb2c832f MultiSimAdmin.ipa
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# iOS Native 0.2.1
|
||||
|
||||
0.2.1 (6) 在 0.2.0 的基础上做界面与图标重构,功能集合不变。应用的整体结构、页面能力、上游白名单和本地数据布局见现行说明 [docs/ios-native.md](ios-native.md),本文只记录本次发布的变化。
|
||||
0.2.1 构建 6 在 0.2.0 的基础上做界面与图标重构,功能集合不变。应用的整体结构、页面能力、上游白名单和本地数据布局见现行说明 [docs/ios-native.md](ios-native.md),本文只记录本次发布的变化。
|
||||
|
||||
## 本次变更
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
- `build/ipa/MultiSimAdmin.ipa`
|
||||
- `build/ipa/MultiSimAdmin.ipa.sha256`
|
||||
|
||||
0.2.1 (6) 校验值:
|
||||
0.2.1 构建 6 校验值:
|
||||
|
||||
```text
|
||||
3bef3c678d0bb77a765d4920cb1fe917b82216f158e05b6f08315014e94bd8b7 MultiSimAdmin.ipa
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# iOS Native 0.2.2
|
||||
|
||||
0.2.2 (7) 把「分组」这个实体从应用里彻底删掉,归类只靠标签;同时完成第二轮配色与图标重构,
|
||||
0.2.2 构建 7 把「分组」这个实体从应用里彻底删掉,归类只靠标签;同时完成第二轮配色与图标重构,
|
||||
界面上不再出现蓝色。页面能力、上游白名单与本地数据布局见现行说明 [docs/ios-native.md](ios-native.md),
|
||||
本文只记录本次发布的变化。
|
||||
|
||||
@@ -27,6 +27,11 @@
|
||||
- 字段名补全:详情页里 `name`、`disk_total_bytes`、`disk_available_bytes`、`percent` 四个键
|
||||
此前直接把原始键名渲染到界面上,现补为「设备名称」「存储总量」「可用存储」「使用率」并排进
|
||||
固定顺序。
|
||||
- 标签与方向胶囊中性化:`AITag` 拆成两类——不传状态色时是中性归类胶囊(浅底、发丝描边、墨色
|
||||
文字,可带图标),传状态色时才用色雾。详情页标签因此不再显示成近乎禁用的黑雾块,并与节点
|
||||
卡片同一形状同一图标;消息中心的「收件 / 发件」由绿色改回中性胶囊配上下箭头,绿色重新只
|
||||
表示健康状态。
|
||||
- 批量标签表在没有任何勾选时给出「先在节点列表勾选要归类的节点」提示,不再留一行空白。
|
||||
- 版本号显示去掉括号:设置页「应用信息」只显示 `0.2.2`。
|
||||
|
||||
## 文档同步
|
||||
@@ -56,10 +61,10 @@
|
||||
- `build/ipa/MultiSimAdmin.ipa`
|
||||
- `build/ipa/MultiSimAdmin.ipa.sha256`
|
||||
|
||||
0.2.2 (7) 校验值:
|
||||
0.2.2 构建 7 校验值:
|
||||
|
||||
```text
|
||||
a8ac7a33aa8dbbeb3197d8131b8c5f77847d1908cbb65beadd8ea6e44c475c12 MultiSimAdmin.ipa
|
||||
0e4ffb74d03c2da5648e7bc039f67b14798e6d3aec723c206bce17da5b8f06fb MultiSimAdmin.ipa
|
||||
```
|
||||
|
||||
IPA 目标为 iOS 16.0 及以上,`arm64`,Bundle ID 为 `fun.chick.multi-simadmin`,未签名,
|
||||
|
||||
+3
-3
@@ -3,7 +3,7 @@
|
||||
本文是 iPhone 应用的唯一现行说明,内容与仓库代码一致。历史设计稿和执行计划保留在
|
||||
`docs/superpowers/` 下,其中已被实现推翻的决策在本文第 9 节逐条列出。
|
||||
|
||||
- 当前版本:`0.2.2`(build 7)
|
||||
- 当前版本:`0.2.2`,构建号 7
|
||||
- 承载分支:`ios-native-ipa`
|
||||
- 运行要求:iOS 16.0 及以上,`arm64`,Bundle ID `fun.chick.multi-simadmin`
|
||||
- 产物:未签名 `MultiSimAdmin.ipa`,由 TrollStore 或用户自有签名流程安装
|
||||
@@ -197,8 +197,8 @@ xcodebuild -scheme MultiSimAdmin \
|
||||
## 11. 文档索引
|
||||
|
||||
- [docs/ios-native.md](ios-native.md):本文,现行说明
|
||||
- [docs/ios-native-0.2.2.md](ios-native-0.2.2.md):0.2.2 (7) 发布说明与校验值
|
||||
- [docs/ios-native-0.2.1.md](ios-native-0.2.1.md):0.2.1 (6) 发布说明与校验值
|
||||
- [docs/ios-native-0.2.2.md](ios-native-0.2.2.md):0.2.2 构建 7 发布说明与校验值
|
||||
- [docs/ios-native-0.2.1.md](ios-native-0.2.1.md):0.2.1 构建 6 发布说明与校验值
|
||||
- [docs/ios-native-0.2.0.md](ios-native-0.2.0.md):0.2.0 发布说明
|
||||
- [docs/superpowers/specs/2026-09-08-ios-native-ipa-design.md](superpowers/specs/2026-09-08-ios-native-ipa-design.md):历史设计稿
|
||||
- [docs/superpowers/plans/2026-09-08-ios-native-ipa-foundation.md](superpowers/plans/2026-09-08-ios-native-ipa-foundation.md):地基执行计划(已完成)
|
||||
|
||||
Reference in New Issue
Block a user