【问题标题】:swift playground UITextField spawns keyboard that is too bigswift playground UITextField 生成太大的键盘
【发布时间】:2018-04-02 17:22:19
【问题描述】:

Mac OS 上的 Playground 中的 Swift。当用户在 UItextfield 中单击时,会生成一个键盘,但与视图相比它非常大,并且只有前几个键可用。

小例子:

import UIKit
import PlaygroundSupport

class TesterViewController : UIViewController {
var testTextField : UITextField!
override func loadView() {
    let view = UIView()
    view.backgroundColor = .white

    testTextField = UITextField()
    testTextField.borderStyle = .roundedRect
    testTextField.text = ""
    view.addSubview(testTextField)
    testTextField.translatesAutoresizingMaskIntoConstraints = false

    NSLayoutConstraint.activate([
        testTextField.topAnchor.constraint(equalTo: view.topAnchor, constant: 20),
        testTextField.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20),
        ])

    self.view = view
    }
}
PlaygroundPage.current.liveView = TesterViewController()

截图

【问题讨论】:

    标签: keyboard uitextfield swift-playground


    【解决方案1】:

    我面临同样的问题。似乎 Playground 的硬编码屏幕尺寸为 768x1024(在 Playground 中运行 UIScreen.main.bounds)并根据此尺寸显示键盘,与实时取景的实际尺寸无关。

    我想出的最佳解决方法是增加视图控制器的大小,使其与键盘匹配:

    let vc = TesterViewController()
    vc.preferredContentSize = vc.view.frame.size // or a custom CGSize
    PlaygroundPage.current.liveView = vc
    

    当然,这会使视图比您希望的要大,因此我只在确实需要访问屏幕键盘进行测试时才使用此解决方法。

    【讨论】:

    • 这很棒。谢谢。令人沮丧的是您无法更改游乐场的大小,但这种解决方法目前还可以。我创建了一个与 UIScreen.main.bounds 匹配的自定义 CGsize,并将其用作我的首选内容大小。有没有更好的方法将用户文本放入 UItextfield?
    • 我正在尝试为一组键盘用户界面制作优化版本。有没有办法看到操场,让它紧贴 iPad 风格的键盘?
    【解决方案2】:

    系统键盘根据按键窗口大小呈现,在游乐场模拟器的情况下,大小为 768x1024。好像是个bug。

    可行的解决方案:

    应该传递一个自定义大小的窗口,而不是传递一个视图控制器。

    let window = UIWindow(frame: CGRect(x: 0,
                                        y: 0,
                                        width: 768,
                                        height: 1024))
    let viewController = MyViewController()
    window.rootViewController = viewController
    window.makeKeyAndVisible()
    
    PlaygroundPage.current.liveView = window
    

    适用于 Xcode 11 及更高版本(最新测试版本 Xcode 12.2)

    已编辑

    我已经检查了建议使用“vc.preferredContentSize”的答案,但它对我不起作用。在 Xcode 12.2 中测试

    let vc = TextFieldViewController()
    vc.preferredContentSize = CGSize(width: 768,height: 1024)
    PlaygroundPage.current.liveView = vc
    

    【讨论】:

    • 更改window 对我有用,但不是view controller,不知道为什么。
    【解决方案3】:

    回复 Adob​​els (Seo 21 '19) ...

    我不确定他为什么提出不同的方法。

    我修改了 dr_barlo 在 17 年 10 月 22 日的方法如下(它也适用于 Xcode 11):

    let vc = TextFieldViewController()
    vc.preferredContentSize = CGSize.init(width: 768,height: 1024)
    PlaygroundPage.current.liveView = vc
    

    如果不是内部运作,它们在结果上看起来都是相同的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-24
      • 2012-02-08
      • 1970-01-01
      • 2019-04-04
      • 2017-03-28
      相关资源
      最近更新 更多