相关疑难解决方法(0)

使用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 时选择 TextField 中的所有文本

在文本字段内单击时如何选择所有文本?就像在 Chrome 等网络浏览器中单击地址栏时的情况一样。

import SwiftUI
import AppKit

   struct ContentView: View {

    var body: some View {
        TextField("Enter a URL", text: $site)
    
  }
}
Run Code Online (Sandbox Code Playgroud)

swift swiftui

15
推荐指数
2
解决办法
8582
查看次数

ScrollView .scrollDismissesKeyboard(.interactively) 感觉很奇怪

我像这样设置了 ScrollView:

ScrollView(.vertical) {
    // ...
}
.scrollDismissesKeyboard(.interactively)
.safeAreaInset(edge: .bottom, spacing: 0) {
    TextInputCellView(with: Color(hex: 0xf5f9fc)) { value in
        vm.send(text: value)
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,新添加的scrollDissmissesKeyboard作品看起来和感觉起来确实有点奇怪。这是一个错误还是我做错了什么?

在此输入图像描述

keyboard scrollview swiftui

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

SwiftUI 相当于 UIViewController 的输入附件视图,即键盘上方的视图始终可见,就像在 iMessage 中一样

UIViewController 上的简单输入附件视图

我想要一个像 iMessage 中那样的输入附件视图。该栏始终在屏幕底部可见。当 TextField 获得焦点时,键盘会跳入,并且栏会自动向上移动,同时停留在键盘顶部。

即使没有 TextInput 具有焦点,输入附件也必须可见

在 UIKit 中,ViewController 可以覆盖 inputAccessory 并成为第一个响应者。因此输入附件永久可见。我找不到在 SwiftUI 中执行此操作的方法。

键盘和配件必须缩小滚动视图

当键盘弹出时,保存消息并填充屏幕的滚动视图必须相应缩小。向下拖动滚动视图和交互移动键盘时也是如此。拖动时必须调整视图的大小。

最重要的是:向下拖动滚动视图并交互移动键盘时必须起作用

最重要的要求是,在拖动滚动视图(以交互方式向下移动键盘)时,这必须顺利工作。iMessage 或 WhatsApp 中的行为相同。输入附件必须在拖动时移动,并且滚动视图也必须调整大小。键盘关闭后,工具栏/输入附件必须在底部保持可见。

不是重复的

我阅读了InputAccessoryView / View Pinned to Keyboard with SwiftUI,但这与我的问题不相似。我需要工具栏可见,即使键盘未显示。此外,该问题中接受的答案在 iOS 15 中无法正常工作。拖动以关闭键盘会留下白色间隙。

UIKit 工作原理

在 UIKit 实现中,持有视图是一个带有键盘关闭交互集的 UITableViewController。这意味着,当显示键盘时,您可以拖动视图,并同时向下拖动键盘和附件视图,直到键盘消失。不过,附件视图仍然保留在底部。

在 UIKit 中的实现非常简单,如下所示。一切都是开箱即用的。

class ChatTableViewController: UITableViewController {
...

    override var inputAccessoryView: UIView? {
        return inputBar
    }

    override var canBecomeFirstResponder: Bool {
        return true
    }
...
}
Run Code Online (Sandbox Code Playgroud)

UIKit 实现看起来不错

UIKit 实现看起来不错

需要 SwiftUI 帮助(Xcode 13 beta 5、iOS 15) …

xcode ios inputaccessoryview swift swiftui

7
推荐指数
1
解决办法
2035
查看次数

SwiftUI inputAccesoryView 实现

我正在尝试在 SwiftUI 中的 TextField 上实现 inputAccessoryView。目标是在键盘上方出现一个“完成”按钮,按下该按钮后即可摆脱键盘(即 resignFirstResponder())。

我遇到了以下 Medium 文章,该文章声称完全按照我的要求实施此行为,但是,我正在努力使其正常工作。

包含要实现的方法的媒体链接。

我试图在一个空白的 XCode 项目中实现这个,我的代码编译,但是,TextField 永远不会出现,我无法触摸应该调出键盘的区域。如何正确实现此代码以获得所需的行为?

代码

    import Foundation
import UIKit
import SwiftUI

class TextFieldViewController
    : UIViewController {

    // our custom text field will report changes to the outside
    let text: Binding<String>?

    // if the toolbar (see below) is used (Done), the keyboard shall be dismissed
    // and optionally we execute a provided closure
    let onDismiss: (() -> Void)?

    init (
        text: Binding<String>
        , onDismiss: (() -> Void)?) {

        self.text = …
Run Code Online (Sandbox Code Playgroud)

uitextfield swift swiftui

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