相关疑难解决方法(0)

如何使SwiftUI列表自动滚动?

将内容添加到ListView时,我希望它自动向下滚动。

我正在使用SwiftUI“列表”和“ BindableObject”作为控制器。新数据将追加到列表中。

List(chatController.messages, id: \.self) { message in
    MessageView(message.text, message.isMe)
}
Run Code Online (Sandbox Code Playgroud)

我希望列表向下滚动,因为我将新数据追加到消息列表中。但是,我必须手动向下滚动。

listview autoscroll swift swiftui

22
推荐指数
5
解决办法
1497
查看次数

控制 SwiftUI 中 TextEditor 的大小

我想TextEditor在我的 ForEach 中有一些,我在 down 中制作了这个示例代码!正如您在 Image 中看到的代码和结果,它TextEditor就像一个贪婪的视图,并占用所有可用空间!至少对我来说有很多缺点!

如果我将高度限制为自定义值,那么我将失去查看 TextEditor 本身的所有字符串和字符串行的可能性,并且我必须向上或向下滚动才能看到其他行,这不是我的设计!

我的目标是占用TextEditor所需的空间,如果我输入新的字符串行,那么它的高度可以增加,或者如果我删除字符串行,它的高度可以缩小到至少 1 行!

我想知道我该怎么做?

struct ContentView: View {
    
    @StateObject var textEditorReferenceType: TextEditorReferenceType = TextEditorReferenceType()
    
    var body: some View {
        
        Text("TextEditorView").bold().padding()
        
        VStack {
            
            ForEach(textEditorReferenceType.arrayOfString.indices, id: \.self, content: { index in
                
                TextEditorView(string: $textEditorReferenceType.arrayOfString[index])

            })
            
        }
        .padding()
        
    }
}


struct TextEditorView: View {
    
    @Binding var string: String
    
    var body: some View {
        
        TextEditor(text: $string)
            .cornerRadius(10.0)
            .shadow(radius: 1.0)
        
    }
    
}

class TextEditorReferenceType: ObservableObject {
    
    @Published var arrayOfString: [String] …
Run Code Online (Sandbox Code Playgroud)

swift swiftui

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

如何防止 TextEditor 在 SwiftUI 中滚动?

我正在尝试创建一个TextEditors列表作为 SwiftUI 应用程序的一部分。我希望各个编辑器不要滚动,因为它们构成了一个更大的滚动列表。但是,当我将 TextEditors 添加到列表中时,它们会向下压缩并且每个视图都可以单独滚动。是否有修饰符/技巧可以让 TextEditor 始终适合其文本内容而不滚动,所以我可以实现这一点?

我正在尝试做的一个最小的例子如下:

struct ParentView: View {
    var items: [Item]

    var body: some View {
        List(items, id: \.id) { item in
            EditorView(item: item)
        }
    }
}

struct EditorView: View {
    @ObservedObject var item: Item

    var body: some View {
         TextEditor(text: $item.text)
    }
}

Run Code Online (Sandbox Code Playgroud)

这是在 macOS SwiftUI 应用程序中,而不是在 iOS 应用程序中,以防有任何平台差异。

编辑:正如评论中指出的那样,我尝试了这种方法Dynamic row hight contains TextEditor inside a List inside a SwiftUI但它似乎没有正常工作 - 行仍然没有正确扩展。

macos swift swiftui

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

ForEach 和 GeometryReader:儿童的可变高度?

我有以下示例:

import SwiftUI

struct TestSO: View {

    @State var cards = [
        Card(title: "short title text", subtitle: "short title example"),
        Card(title: "medium title text text text text text", subtitle: "medium title example"),
        Card(title: "long title text text text text text text text text text text text text text text text text text",
         subtitle: "long title example"),
        Card(title: "medium title text text text text text", subtitle: "medium title example"),
        Card(title: "short title text", subtitle: "short title example"),
    ]

    @State var showDetails …
Run Code Online (Sandbox Code Playgroud)

foreach swiftui geometryreader

5
推荐指数
1
解决办法
1454
查看次数

在 SwiftUI 中根据文本高度自动调整视图高度

我正在尝试在 SwiftUI 中创建一个视图,其中左侧图像的背景应根据右侧文本的高度垂直缩放。

我尝试了很多不同的方法,从GeometryReader.layoutPriority(),但我没有设法让它们中的任何一个工作。

当前状态:

当前状态

期望状态:

在此处输入图片说明

我知道我可以通过.frame(100)对我发布的示例进行硬编码来模仿该功能,但是由于右侧的文本是动态的,所以这是行不通的。

这是屏幕截图中视图的完整代码:

import SwiftUI

struct DynamicallyScalingView: View {
    var body: some View {
        HStack(spacing: 20) {
            Image(systemName: "snow")
                .font(.system(size: 32))
                .padding(20)
                .background(Color.red.opacity(0.4))
                .cornerRadius(8)

            VStack(alignment: .leading, spacing: 8) {
                Text("My Title")
                    .foregroundColor(.white)
                    .font(.system(size: 13))
                    .padding(5)
                    .background(Color.black)
                    .cornerRadius(8)
                Text("Dynamic text that can be of different leghts. Spanning from one to multiple lines. When it's multiple lines, the background on the left should scale vertically")
                    .font(.system(size: 13))
            }
        }
        .padding(.horizontal)
    } …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui

4
推荐指数
2
解决办法
1950
查看次数

标签 统计

swiftui ×5

swift ×4

autoscroll ×1

foreach ×1

geometryreader ×1

ios ×1

listview ×1

macos ×1