图像未在 SwiftUI TabView 中调整大小

Posted

技术标签:

【中文标题】图像未在 SwiftUI TabView 中调整大小【英文标题】:Image not resizing in SwiftUI TabView 【发布时间】:2019-10-18 11:33:46 【问题描述】:

我正在尝试在 SwiftUI TabView 中使用自定义图标。我看不出这段代码有什么问题——我在图片上包含了resizable,但它并没有按比例缩小。

HomeView()
          .tag(0)
          .tabItem 
            VStack 
              Image("tab-home")
                .resizable()
                .aspectRatio(CGSize(width: 20, height: 20), contentMode: .fit)
              Text("Home")
            

          

当我查看这个时,图像是全尺寸的。

Image 是 SF 符号时,它可以正常工作。

任何想法,SwiftUI 忍者?

【问题讨论】:

【参考方案1】:

如果您可以接受系统为您选择图像大小,您实际上可以添加自定义Symbol Image Set 来实现此目的。您可以使用任何矢量图标作为您的基础。

导出现有符号

要获取我们需要的符号模板,您可以打开SF Symbols app,选择一个图标并将其导出。

在草图中编辑

在 Sketch(或您选择的其他工具)中打开。请注意,定义了一个独特的结构。我们需要遵循这个结构。 在中间,有一个名为“Regular-M”的尺寸,定义这个尺寸就足以满足我们的目的。打开“Shape”组并将路径元素放入其中。

您可以删除其他尺寸。然后,使整个页面可导出并导出为 SVG。

在 Xcode 中导入

在您的 XCAsset 文件中,添加一个新的 Symbol Image Set 并将新创建的 SVG 文件拖放到其中。

现在,您可以使用您在 XCAsset 文件中定义的名称来简单地引用图像,正如您所期望的那样。图像大小会自动调整并正确使用强调色:

TabView 
    Text("Hello, world 1").tabItem 
        Image("your.image.name")
        Text("title1")
    

【讨论】:

我一直在这样做,但是在 TabView 中使用自定义符号时,图像比它应该的要小,实际上即使我跳过编辑步骤也是这种情况(导出 SFSymbol SVG,然后直接将其作为符号资产导入 Xcode,无需编辑)。知道为什么吗?【参考方案2】:

在 UIKit 中也是如此,解决方案是为您的图像使用正确的尺寸;

https://***.com/a/29874619/3393964

【讨论】:

谢谢。我以为它可能已经在 SwiftUI 中解决了,但没有。 是的,你实际上可以解决它,只需使用 .renderingMode(.original)

以上是关于图像未在 SwiftUI TabView 中调整大小的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI:如何将图像更新为 TabView 中的填充/轮廓

在 SwiftUI 中的 tabview 中嵌入 webview

带有 TabView、SwiftUI 的水平分页滚动视图

SwiftUI 无限 TabView 项

在 SwiftUI 中构建一个自定义的类 TabView 视图

SwiftUI 在 NavigationLink 视图中隐藏 TabView 栏