Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Keyboard swift操场UITextField生成的键盘太大_Keyboard_Uitextfield_Swift Playground - Fatal编程技术网

Keyboard swift操场UITextField生成的键盘太大

Keyboard swift操场UITextField生成的键盘太大,keyboard,uitextfield,swift-playground,Keyboard,Uitextfield,Swift Playground,在MacOS上的操场上的斯威夫特。当用户单击UItextfield时,会生成一个键盘,但与视图相比它非常大,并且只有前几个键可用 最简单的例子: import UIKit import PlaygroundSupport class TesterViewController : UIViewController { var testTextField : UITextField! override func loadView() { let view = UIView() vi

在MacOS上的操场上的斯威夫特。当用户单击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()
截图
我面临同样的问题。似乎游乐场的硬编码屏幕大小为768x1024(在游乐场中运行
UIScreen.main.bounds
),并根据此大小显示键盘,与实时视图的实际大小无关

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

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

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

系统键盘根据按键窗口大小显示,对于操场模拟器,大小为768x1024。看起来像是一只虫子

有效的解决方案:

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

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
回复Adobels(Seo 21'19)

我不知道他为什么提出不同的方法

我在2017年10月22日修改了巴罗博士的方法,如下所示(它也适用于Xcode 11):


如果不是内部工作,它们的结果都是相同的。

这很好。谢谢令人沮丧的是,你不能改变操场的大小,但这个解决办法现在还可以。我创建了一个与UIScreen.main.bounds匹配的自定义CGsize,并将其用作我的首选内容大小。有没有更好的方法将用户文本输入UItextfield?我正在尝试为一组键盘UI游乐场制作一个优化版本。有没有一种方法可以看到操场,使它与iPad风格的键盘紧密配合?改变
窗口对我来说很有效,但不知道为什么改变
视图控制器。
let vc = TextFieldViewController()
vc.preferredContentSize = CGSize.init(width: 768,height: 1024)
PlaygroundPage.current.liveView = vc