SwiftUI 全屏图片背景

Posted

技术标签:

【中文标题】SwiftUI 全屏图片背景【英文标题】:SwiftUI fullscreen image background 【发布时间】:2019-12-30 03:23:10 【问题描述】:

我想在背景中有一个全屏图像。我已经实现了这个:

struct LoginView: View 
    var body: some View 
        VStack 
            Spacer();
            Text("Hallo");
            Text("Hallo2");
            Text("Hallo2");
            Text("Hallo2");
            Text("Hallo2");
            Text("Hallo2");
            Text("Hallo2");
            Spacer();
            .background(Image("Background LaunchScreen")
                .resizable()
                .aspectRatio(UIImage(named: "Background LaunchScreen")!.size, contentMode: .fill)
                .clipped())
            .edgesIgnoringSafeArea(.all)
    

移除垫片后,图像不再以全屏模式显示。 确定可以用不同的方式解决吗?

如果我将模拟器中的 iPhone 转到一边,我会出现左右白色条纹。 我该如何更改?

【问题讨论】:

【参考方案1】:

这是使用GeometryReaderZStack 的可能解决方案:

import SwiftUI

struct LoginView: View 
    var body: some View 
        GeometryReader  geometry in
            ZStack 
                Image("LaunchImage")
                    .resizable()
                    .aspectRatio(geometry.size, contentMode: .fill)
                    .edgesIgnoringSafeArea(.all)
                VStack 
                    ForEach (1...10, id: \.self)  _ in
                        Text("Hallo")
                            .foregroundColor(Color.white)
                    
                
            
        
    


#if DEBUG
struct LoginView_Previews: PreviewProvider 
    static var previews: some View 
        LoginView()
    

#endif

结果

【讨论】:

上面的解决方案对我有用,你能告诉我为什么你使用 GeometryReader 然后 ZStack 因为我也尝试了下面的代码 ZStack Image("bgImg") .resizable() .scaledToFill() .edgesIgnoringSafeArea (.all) 这对我有用,所以有什么不同 @Dilip 当时(2019 年 8 月 25 日),这是我让它工作的唯一方法。如果它现在可以在没有GeometryReader 的情况下工作,那就更好了。 :) 非常感谢我只使用您的答案,感谢您的回复 这会使图像增加 ZStack,如果我将某些东西向左对齐,它会从屏幕外开始【参考方案2】:

这应该可以在没有 GeometryReader 的情况下工作:

var body: some View 
       ZStack 
            ZStack 
            .frame( maxWidth: .infinity, maxHeight: .infinity)
            .background(Image("Background LaunchScreen").resizable())
            .ignoresSafeArea()
            VStack 
                Text("Text")
                Text("Text")
                Text("Text")
                Text("Text")
                Spacer()
            
        


【讨论】:

以上是关于SwiftUI 全屏图片背景的主要内容,如果未能解决你的问题,请参考以下文章

在 SwiftUI 中,如何将视频循环添加为全屏背景图像?

SwiftUI - tvOS 上的 AVPlayerViewController 全屏

swiftui 2.0 图片库 onTapgesture 只显示数组中的第一张图片

SwiftUI:UIAlertController ActionSheet 全屏

如何全屏显示 SwiftUI 子视图?

如何在 SwiftUI 中呈现全屏 AVPlayerViewController