Ios 如何使一个框架最大具有一定的宽度,并且总是尽可能短?
我正在尝试构建一个组件,它接收一个名称并将其显示在一个框架内。我希望这个框架有最小的宽度尽可能尊重垫,避免打破线。宽度限制为90:之后,文本行应断开。我尝试使用Ios 如何使一个框架最大具有一定的宽度,并且总是尽可能短?,ios,swift,swiftui,Ios,Swift,Swiftui,我正在尝试构建一个组件,它接收一个名称并将其显示在一个框架内。我希望这个框架有最小的宽度尽可能尊重垫,避免打破线。宽度限制为90:之后,文本行应断开。我尝试使用frame修改器的maxWidth属性,但是我的frame得到一个固定的90值作为宽度。以下是该组件的代码片段: 导入快捷界面 结构ContentView:View{ 变量名称:String var body:一些观点{ 文本(名称) .font(.system(大小:12)) .背景(颜色.红色) .padding(.卧式,7) .pa
frame
修改器的maxWidth
属性,但是我的frame得到一个固定的90值作为宽度。以下是该组件的代码片段:
导入快捷界面
结构ContentView:View{
变量名称:String
var body:一些观点{
文本(名称)
.font(.system(大小:12))
.背景(颜色.红色)
.padding(.卧式,7)
.padding(.vertical,5)
.背景(颜色.黄色)
.帧(最小宽度:0,最大宽度:90)
.背景(颜色.绿色)
}
}
结构内容视图\u预览:PreviewProvider{
静态var预览:一些视图{
团体{
ContentView(名称:“这是一个很长的名称”)
.previewDisplayName(“长名称”)
ContentView(名称:“Hi”)
.previewDisplayName(“简称”)
}
.previewLayout(.sizeThatFits)
}
}
我还尝试使用
minWidth
和idealWidth
属性,但结果总是一样的。如何使宽度以90作为限制而不是固定值?我不完全确定这是否是您想要的,但如果移动帧(minWidth:0,maxWidth:90)修改器使其成为最后一个修改器,则修改器链早期的所有视图的大小都将小于或等于maxWidth。链中晚于“帧”修改器的任何修改器的大小都不会变化
我不完全确定这是否是您想要的,但如果移动帧(minWidth:0,maxWidth:90)修改器使其成为最后一个修改器,则修改器链早期的所有视图的大小都将小于或等于maxWidth。链中晚于“帧”修改器的任何修改器的大小都不会变化
实际上,一个轴的fixedSize应该可以工作,但由于某些原因,它不能工作,因此下面仅提出运行时解决方案(不用于静态预览),即手动计算限制并在下次刷新时应用(以避免循环)
实际上,
fixedSize
通过一个轴应该可以工作,但由于某些原因,它不能工作,因此下面仅提出运行时解决方案(不用于静态预览),即手动计算限制并在下次刷新时应用(以避免循环)
struct DemoTightingText: View {
var name: String
@State private var maxWidth: CGFloat = 90
var body: some View {
VStack {
Text(name)
.font(.system(size: 12))
.background(Color.red)
.padding(.horizontal, 7)
.padding(.vertical, 5)
.background(Color.yellow)
.background(GeometryReader {gp -> Color in
DispatchQueue.main.async {
// update on next cycle with calculated width !!!
self.maxWidth = min(gp.size.width, 90)
}
return Color.clear
})
}
.frame(maxWidth: maxWidth)
.background(Color.green)
// .fixedSize(horizontal: true, vertical: false) // this must be work, but don't
}
}