Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使一个框架最大具有一定的宽度,并且总是尽可能短?_Ios_Swift_Swiftui - Fatal编程技术网

Ios 如何使一个框架最大具有一定的宽度,并且总是尽可能短?

Ios 如何使一个框架最大具有一定的宽度,并且总是尽可能短?,ios,swift,swiftui,Ios,Swift,Swiftui,我正在尝试构建一个组件,它接收一个名称并将其显示在一个框架内。我希望这个框架有最小的宽度尽可能尊重垫,避免打破线。宽度限制为90:之后,文本行应断开。我尝试使用frame修改器的maxWidth属性,但是我的frame得到一个固定的90值作为宽度。以下是该组件的代码片段: 导入快捷界面 结构ContentView:View{ 变量名称:String var body:一些观点{ 文本(名称) .font(.system(大小:12)) .背景(颜色.红色) .padding(.卧式,7) .pa

我正在尝试构建一个组件,它接收一个名称并将其显示在一个框架内。我希望这个框架有最小的宽度尽可能尊重垫,避免打破线。宽度限制为90:之后,文本行应断开。我尝试使用
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
    }
}