SwiftUI 设置图像边界

Posted

技术标签:

【中文标题】SwiftUI 设置图像边界【英文标题】:SwiftUI Set Image Boundary 【发布时间】:2020-09-28 07:41:10 【问题描述】:

我想在不移动图像或文本的情况下设置我的右图像框架边界,就像左边界一样。我怎样才能做到这一点。我尝试了几种方法,但找不到解决方案。

【问题讨论】:

不清楚你在问什么。 我正在尝试设置我的 ımage 右边界,正如您在标签栏个人资料图片中看到的那样。我想让边界像左边一样,我的意思是更接近图片。 那么您是否要创建一个带有等距图像的标签栏(上图)? 没错,还想确保图像帧边界不与其他帧相交。 您需要 edit 将所有相关代码作为文本包含在内,使用正确的代码格式 - 而不是屏幕截图 - 以 minimal reproducible example 的形式提出问题主题。 【参考方案1】:

您应该使用内置的TabView。它为您提供了所有功能,并且已经考虑到了可访问性。

这是一个示例(您可以为您的文本和图像更改它):

struct ContentView: View 
    
    @State private var selection: Int = 1

    var body: some View 
        TabView(selection: $selection) 
            Text("Tab Content 1")
                .tabItem 
                    Label("1", systemImage: "1.square")
                
                .tag(1)
            
            Text("Tab Content 2")
                .tabItem 
                    Label("2", systemImage: "2.square")
                
                .tag(2)
            
            Text("Tab Content 3")
                .tabItem 
                    Label("3", systemImage: "3.square")
                
                .tag(3)
        
    

结果:


自定义版本(极不推荐):

struct ContentView: View 

    var body: some View 
        VStack 
            Spacer()
            
            Text("Main Content")
            
            Spacer()
            
            HStack 
                VStack 
                    Button 
                        //
                     label: 
                        Label("1", systemImage: "1.square")
                    
                .frame(maxWidth: .infinity)
                
                VStack 
                    Button 
                        //
                     label: 
                        Label("2", systemImage: "2.square")
                    
                .frame(maxWidth: .infinity)
                
                VStack 
                    Button 
                        //
                     label: 
                        Label("3", systemImage: "3.square")
                    
                .frame(maxWidth: .infinity)
            .frame(height: 50)
        
    

【讨论】:

我知道 tabview 但 tabview 的问题是它不允许创建超过 5 个 tabbar 。这就是我创建自定义标签栏的原因。因为我必须显示 6 个 tabbar。但苹果不推荐,让你用 tabview 创建超过 5 个。 @Begbie 如果这是极限,那就坚持极限。 6 个标签可能是可用性的噩梦。尝试更改标签的用途。我无法阅读您原始图像中的语言,但是像“主页”、“个人资料”、“设置”之类的东西将是最好的方法。例如,在配置文件中,您可能有不同的选项,不一定是他们自己的选项卡。不要重新制作标签视图,这对用户来说将是不必要的痛苦和问题。 我知道。我同意你的观点,它对用户来说也不是一个好的用户体验,但问题是我工作的公司已经做了这个设计,他们希望我这样做。所以基本上我别无选择:( @Begbie 作为开发者,你应该质疑设计师为什么选择这个——他们可能不知道默认TabView 的限制。他们会想要一个好的应用程序——你也想制作好的应用程序。只需向设计师提问,例如说该应用程序不适合 Apple 的 Human Interface Guidelines。还请将它们链接到here 并阅读“避免标签过多”部分。 Apple 也很有可能因此拒绝该应用程序,因此这应该是他们的首要任务。 @Begbie 在开发过程中调整设计总是会发生在任何公司 - 并确保这是正确的,所以它不会被拒绝。没关系,设计师可能不知道这些功能,但只需将我上面发送的链接发送给他们,这样他们就可以阅读并下次更加小心。

以上是关于SwiftUI 设置图像边界的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI:调整 ScrollView 的边界

SwiftUI:防止 Image() 将视图矩形扩展到屏幕边界之外

SwiftUI 标签文本和图像垂直未对齐

SwiftUI:动态设置图像的大小

SwiftUI:如何找到图像的高度并使用它来设置框架的大小

SwiftUI:如何使用延迟在两个图像之间设置动画过渡?