相关疑难解决方法(0)

如何在 SwiftUI 中以编程方式滚动列表?

看起来在当前的工具/系统中,刚刚发布的 Xcode 11.4/iOS 13.4 中将没有 SwiftUI 原生支持“滚动到”功能List。因此,即使他们,Apple,将在下一个主要版本中提供它,我也需要对 iOS 13.x 的向后支持。

那么我将如何以最简单和轻松的方式做到这一点?

  • 滚动列表结束
  • 滚动列表到顶部
  • 和别的

(我不喜欢像之前在 SO 上提出的那样将完整的UITableView基础设施包装起来UIViewRepresentable/UIViewControllerRepresentable)。

ios swift swiftui

32
推荐指数
5
解决办法
2万
查看次数

使用SwiftUI在键盘出现时将TextField向上移动?:iOS

TextField我的主箱里有七个ContentView。当用户打开键盘时,其中一些TextField隐藏在键盘框架下。所以TextField当键盘出现时,我想分别向上移动。

我已使用以下代码TextField在屏幕上添加。

struct ContentView : View {
    @State var textfieldText: String = ""

    var body: some View {
            VStack {
                TextField($textfieldText, placeholder: Text("TextField1"))
                TextField($textfieldText, placeholder: Text("TextField2"))
                TextField($textfieldText, placeholder: Text("TextField3"))
                TextField($textfieldText, placeholder: Text("TextField4"))
                TextField($textfieldText, placeholder: Text("TextField5"))
                TextField($textfieldText, placeholder: Text("TextField6"))
                TextField($textfieldText, placeholder: Text("TextField6"))
                TextField($textfieldText, placeholder: Text("TextField7"))
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

输出量

ios swift swiftui

31
推荐指数
13
解决办法
5968
查看次数

如何在SwiftUI中使另一个视图的大小

我正在尝试重新创建Twitter iOS应用的一部分以学习SwiftUI,并且想知道如何动态地将一个视图的宽度更改为另一视图的宽度。就我而言,使下划线与“文本”视图的宽度相同。

我已附上屏幕截图,以尝试更好地解释我的意思。任何帮助将不胜感激,谢谢!

这也是我到目前为止的代码:

import SwiftUI

struct GridViewHeader : View {

    @State var leftPadding: Length = 0.0
    @State var underLineWidth: Length = 100

    var body: some View {
        return VStack {
            HStack {
                Text("Tweets")
                    .tapAction {
                        self.leftPadding = 0

                }
                Spacer()
                Text("Tweets & Replies")
                    .tapAction {
                        self.leftPadding = 100
                    }
                Spacer()
                Text("Media")
                    .tapAction {
                        self.leftPadding = 200
                }
                Spacer()
                Text("Likes")
            }
            .frame(height: 50)
            .padding(.horizontal, 10)
            HStack {
                Rectangle()
                    .frame(width: self.underLineWidth, height: 2, alignment: .bottom)
                    .padding(.leading, leftPadding)
                    .animation(.basic())
                Spacer()
            }
        } …
Run Code Online (Sandbox Code Playgroud)

ios swiftui

16
推荐指数
2
解决办法
5298
查看次数

在 SwiftUI 中将图像裁剪为正方形

我试图将多个单元格彼此相邻放置,其中每个单元格由下面的图像和文本组成。单元格本身应该是一个正方形,并且应该缩放图像以填充剩余空间(剪切图像的一部分)。

首先,我尝试将图像和下面的文字制作成正方形。现在我的问题是,我不知道如何在 SwiftUI 中正确实现。使用此代码时,我可以让它工作:

VStack {
    Image(uiImage: recipe.image!)
        .resizable()
        .aspectRatio(contentMode: .fill)
        .frame(width: 200, height: 200, alignment: .center)
        .clipped()
    Text(recipe.name)
}
Run Code Online (Sandbox Code Playgroud)

图 1 问题是,我必须指定一个固定的帧大小。我想要的是一种制作单元格的方法,它保持 1:1 的纵横比并且可以调整大小,因此我可以将它们的动态数量放在彼此相邻的屏幕上。

我也尝试使用

VStack {
    Image(uiImage: recipe.image!)
        .resizable()
        .aspectRatio(1.0, contentMode: .fit)
        .clipped()
    Text(recipe.name)
}
Run Code Online (Sandbox Code Playgroud)

图 2 这给了我方形图像,动态缩放。但问题是,图像现在被拉伸以填充正方形而不是缩放以填充它。

我的下一个想法是把它剪成方形。为此,我首先尝试将其剪成圆形(因为显然没有方形):

VStack {
    Image(uiImage: recipe.image!)
        .resizable()
        .aspectRatio(1.0, contentMode: .fit)
        .clipped()
    Text(recipe.name)
}
Run Code Online (Sandbox Code Playgroud)

图 3

但是出于某种奇怪的原因,它并没有真正剪辑图像,而是保留了剩余的空间......

那么我是不是没有看到任何东西,或者是将图像裁剪成框架修改器的唯一选项?

编辑

澄清:我不太关心文本,因为整个单元格(或者图像更简单)是方形的,无需通过.frame非方形原始图像指定其大小,也无需拉伸非方形原始图像以使其成为合身。

所以完美的解决方案是 VStack 是方形的,但获得方形图像也可以。它应该看起来像图像 1,但不必使用.frame修饰符。

ios swiftui

13
推荐指数
2
解决办法
7839
查看次数

在 SwiftUI 中获取 ScrollView 的当前位置?

我看到了 position 属性,但我认为它只是用来设置 x 和 y 的,但我不知道如何识别当前位置。

或者完全如何使用像 onHover 这样的事件收入属性?

swift swiftui

8
推荐指数
1
解决办法
1万
查看次数

在SwiftUI中获取List的内容偏移量

我正在尝试在SwiftUI中创建像这样的视差标头效果https://twitter.com/KhaosT/status/1140814602017464320,但是我真的不知道如何在滚动时获取列表的内容偏移量。

有谁知道滚动时如何计算列表的内容偏移量?

list offset ios swiftui

6
推荐指数
1
解决办法
1257
查看次数

获取父级大小 SwiftUI

有没有什么方法可以使用 SwiftUI 查找父视图大小,我查看了文档和示例,似乎大多数(如果不是全部)都是硬编码大小,理想情况下我想找到父视图的大小,然后设置子视图大小基于父视图大小的百分比(可能在某些快速助手类或其他类中)例如

func getSizeFromParent(fractionHeight: Int, fractionWidth: Int) -> Size
{
    var parentSize = // is there a way to get parent size somehow

    var newHeight = parentSize.height * fractionHeight
    var newWidth = parentSize.width * fractionWidth

    return Size(newHeight, newWidth)
}
Run Code Online (Sandbox Code Playgroud)

请注意,上面的代码并不是一个工作示例,只是伪代码

swiftui

6
推荐指数
1
解决办法
1万
查看次数

SwiftUI中的比例高度(或宽度)

我开始探索SwiftUI,却找不到一种简单的方法:我希望View具有成比例的高度(基本上是其父代高度的百分比)。假设我有3个垂直堆叠的视图。我想要:

  • 第一个达到其父母身高的43%
  • 第二高为(其父母身高的)37%
  • 最后一个高度(其父高的20%)

我从WWDC19观看了这个有趣的视频,它介绍了SwiftUI中的自定义视图(https://developer.apple.com/videos/play/wwdc2019/237/),并且我理解(如果我错了,请纠正我)基本上从不使用View本身具有大小,大小是其子代的大小。因此,父视图询问其子项的高度。他们的回答是:“身高减半!” 然后什么?布局系统(与我们以前使用的布局系统不同)如何处理这种情况?

如果您编写以下代码:

struct ContentView : View {
    var body: some View {
        VStack(spacing: 0) {
            Rectangle()
                .fill(Color.red)
            Rectangle()
                .fill(Color.green)
            Rectangle()
                .fill(Color.yellow)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

SwiftUI布局系统将每个视图的大小设置为1/3高,根据我上面发布的视频,这是正确的。您可以通过以下方式将矩形包装在框架中:

struct ContentView : View {
    var body: some View {
        VStack(spacing: 0) {
            Rectangle()
                .fill(Color.red)
                .frame(height: 200)
            Rectangle()
                .fill(Color.green)
                .frame(height: 400)
            Rectangle()
                .fill(Color.yellow)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这样,布局系统将第一个矩形的尺寸设置为200高,第二个矩形的尺寸设置为400高,第三个矩形的尺寸适合所有剩余空间。再说一次,这很好。您不能(以这种方式)指定比例高度。

ios autolayout swift swiftui

3
推荐指数
1
解决办法
908
查看次数

标签 统计

swiftui ×8

ios ×6

swift ×4

autolayout ×1

list ×1

offset ×1