Rápido en el patio de juegos en Mac OS. Cuando el usuario hace clic en un campo de texto UI, aparece un teclado pero es muy grande en comparación con la vista y solo las primeras teclas están disponibles.

Ejemplo mínimo:

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()

Captura de pantalla ingrese la descripción de la imagen aquí

9
David Gerhard 21 oct. 2017 a las 23:22

3 respuestas

La mejor respuesta

Me enfrento al mismo problema. Parece que Playground tiene un tamaño de pantalla codificado de 768x1024 (ejecute UIScreen.main.bounds en Playground) y muestra el teclado de acuerdo con este tamaño, independientemente del tamaño real de la vista en vivo.

La mejor solución que se me ocurrió es aumentar el tamaño del controlador de vista para que coincida con el teclado:

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

Por supuesto, esto hace que la vista sea más grande de lo que desea, por lo que solo uso esta solución cuando realmente tengo que acceder al teclado en pantalla para realizar pruebas.

9
dr_barto 22 oct. 2017 a las 14:09

En cambio esta línea

PlaygroundPage.current.liveView = MyViewController()

Escribe esto

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

Funciona en Xcode 11

0
Adobels 21 sep. 2019 a las 14:46

En respuesta a Adobels (Seo 21 '19) ...

No estoy seguro de por qué propuso un enfoque diferente.

Modifiqué el enfoque de dr_barlo del 22 de octubre de 2017 de la siguiente manera (y también funciona en Xcode 11):

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

Todos parecen equivalentes en los resultados, si no en el funcionamiento interno.

0
user10532303 22 ene. 2020 a las 05:41