使用 .aspectRatio(contentMode: .fill) 后文本离开屏幕

Posted

技术标签:

【中文标题】使用 .aspectRatio(contentMode: .fill) 后文本离开屏幕【英文标题】:Text goes off screen after using .aspectRatio(contentMode: .fill) 【发布时间】:2020-08-10 15:14:18 【问题描述】:

我正在尝试使用 SwiftUI 制作带有背景图片的应用。但是,图像与屏幕的纵横比不同,使我使用.aspectRatio(contentMode: .fill) 将其填满整个屏幕。在我开始添加文本之前,这完全正常。添加文本时,它现在会离开屏幕,而不是像通常应该做的那样换行。

这是我的代码:

struct FeaturesView: View

    var body: some View
    
        ZStack
        
            Image("background")
                .resizable()
                .aspectRatio(contentMode: .fill)
                .edgesIgnoringSafeArea(.all)
            
            VStack(alignment: .leading)
            
                Text("Hello this is some sample text that i am writing to show that this text goes off the screen.")
            
            .foregroundColor(.white)
        
    

这是预览:

如您所见,文本离开了屏幕。我曾尝试使用“.frame()”并指定宽度和高度来修复它,但这会导致在其他视图中使用视图时出现问题。我正在使用 Xcode 12 测试版。

我是 Swift 和 SwiftUI 的新手,感谢所有帮助 :)

【问题讨论】:

【参考方案1】:

当然可以,因为图像扩展了容器的框架,即ZStack,比屏幕宽度宽。

这是一个解决方案 - 让图像在真实背景中过自己的生活,并且不影响他人。使用 Xcode 12 / ios 14 测试。

var body: some View

    ZStack
    
        // ... other content
        VStack(alignment: .leading)
        
            Text("Hello this is some sample text that i am writing to show that this text goes off the screen.")
        
        .foregroundColor(.white)
    
    .frame(maxWidth: .infinity, maxHeight: .infinity)
    .background(
        Image("background")
            .resizable()
            .aspectRatio(contentMode: .fill)
            .edgesIgnoringSafeArea(.all)
    )

【讨论】:

啊哈,我没想到……我现在觉得自己很蠢,谢谢你的帮助:)【参考方案2】:

发生这种情况是因为您的 ZStack 使用的宽度等于您的图像,请尝试使用 VStack 和 geometryReader 包装您的图像。

GeometryReader  geometry in
    ZStack 
        Image() // your image
        VStack(alignment: .leading) 
            Text("Hello this is some sample text that i am writing to show that this text goes off the screen.")
        .foregroundColor(.white)
    .frame(maxWidth: geometry.size.width)     

我是在 Windows 上写的,可能有拼写错误

【讨论】:

所以你可以使用geometry.size.width来获取屏幕宽度? 这很聪明!我不知道

以上是关于使用 .aspectRatio(contentMode: .fill) 后文本离开屏幕的主要内容,如果未能解决你的问题,请参考以下文章

VNDetectRectanglesRequest 上的 AspectRatio:它可以处理宽度 > 高度吗?

Flutter--卡片组件

Jcrop 中的一个错误,minSize + aspectRatio

flutte页面布局四

xml 可以通过设置宽高比来设置了,通过设置只有一个单一的宽度或高度和使用app:aspectRatio设置宽高比,那么PercentFrameLayout或PercentRelativeLayout

xml 可以通过设置宽高比来设置了,通过设置只有一个单一的宽度或高度和使用app:aspectRatio设置宽高比,那么PercentFrameLayout或PercentRelativeLayout