我有一个秒表在动态岛紧凑模式下运行,使用相同的字体和颜色。第一个截图是空闲的秒表,第二个截图是运行的秒表。
空闲状态:
运行状态:
我相信正确的状态应该是第一个截图。
代码(compactTrailing
块内):
if stopwatch.isRunning {
// Stopwatch running state
Text(timerInterval: stopwatch.timeInterval, countsDown: false)
.font(.system(size: 14, weight: .medium))
.foregroundColor(iconTintDarkMode)
} else {
// Stopwatch idle state
Text(timerString(time: stopwatch.elapsedTime))
.font(.system(size: 14, weight: .medium))
.foregroundColor(iconTintDarkMode)
}
计时器字符串方法:
func timerString(time: Double) -> String {
var result = ""
let hours = Int(time) / 3600
let minutes = Int(time) / 60 % 60
let seconds = Int(time) % 60
if hours > 0 {
result.append(String(format: "%02d:", hours))
}
result.append(String(format: "%02d:%02d", minutes, seconds))
return result
}
有人知道为什么会有区别吗?
1条答案
按热度按时间jq6vz3qz1#
在SwiftUI中,默认情况下,动态岛会自动调整自身大小,以占据紧凑模式下的所有可用水平空间。此行为旨在确保动态岛内的内容在紧凑型设备的小屏幕中完全可见并易于访问。
如果要更改此行为,您有以下几个选项:
1.使用**.frame修饰符为视图设置自定义框架。这将允许您控制视图的大小和位置。
1.使用其他布局(如VStack或HStack**)控制视图的布局。这些布局允许您在垂直或水平方向上排列视图。
1.使用**.fixedSize修饰符**为视图设置固定大小。这将防止视图占用不必要的空间。
1.使用if语句和环境值(如sizeClass)根据屏幕大小有条件地更改布局。
通过使用其中一种方法,可以控制紧凑模式下视图的布局,并确保它满足设计要求。