SwiftUI:如何让 scaledToFit() 使用 HStack 均匀地应用缩放
Posted
技术标签:
【中文标题】SwiftUI:如何让 scaledToFit() 使用 HStack 均匀地应用缩放【英文标题】:SwiftUI: how to get scaledToFit() to apply scaling evenly with HStack 【发布时间】:2021-05-13 23:52:56 【问题描述】:我有一个类似于 SwiftUI: minimumScaleFactor not applying evenly to stack elements 的问题,但在我的情况下,我什至无法使用 HStack 缩放元素。
我想要:
struct ScaleWithSymbol: View
var body: some View
HStack(spacing: 0)
Group
Text("XX°")
Text("↑")
.scaleEffect(0.75)
.lineLimit(1)
struct ScaleWithSymbol_Previews: PreviewProvider
static var previews: some View
ScaleWithSymbol()
.frame(height: 8)
// .frame(width: 18)
.scaledToFit()
.minimumScaleFactor(0.1)
如果我强制高度,事情会均匀缩放 (.frame(height: 8)) 并产生上面的屏幕截图。
但是如果我通过 .frame(width: 18) 来强制宽度——我的用例是我想将视图强制为给定宽度——我得到:
缩放到固定宽度但均匀的最佳方法是什么?谢谢。
【问题讨论】:
【参考方案1】:奇怪的是,问题出在这一行:
.lineLimit(1)
删除之后,代码就可以工作了。这是一个带有Slider
的交互式示例:
struct ContentView: View
@State private var width: CGFloat = 50
var body: some View
VStack
ScaleWithSymbol()
.scaledToFit()
.minimumScaleFactor(0.1)
.frame(width: width)
Slider(value: $width, in: 1 ... 60)
struct ScaleWithSymbol: View
var body: some View
HStack(spacing: 0)
Text("XX°")
Text("↑").scaleEffect(0.75)
【讨论】:
谢谢 George_E,但没有解决我的核心问题。缩放比例仍然不均匀。至少在 Xcode 12.5 中,当宽度较小时,第二个 Text() 的缩放比例与第一个不同。我希望两个 Text() 之间的比例保持不变。 @t9mike 已修复,没有注意到 - 但事实证明问题只是lineLimit(1)
- 需要吗?
所以我的根本问题是我在 .scaledToFit() 之前有 .frame()。然后我添加了 .linelimit() 来解决这个问题(有点!)。乌格。非常感谢@George_E 的帮助和展开这个。以上是关于SwiftUI:如何让 scaledToFit() 使用 HStack 均匀地应用缩放的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI Image scaledToFill 布局行为