【问题标题】:UIScrollView does not scroll even though content pushed off screen即使内容被推离屏幕,UIScrollView 也不滚动
【发布时间】:2019-09-23 16:29:56
【问题描述】:

我正在学习以编程方式使用UIScrollView

我创建了一个滚动视图,锚定到全屏,然后添加了 2 个元素。

一个固定在顶部,另一个固定在一个应该将其推离屏幕的位置。

我希望视图可以滚动到它,但事实并非如此。它只是保持不变。

我已经阅读了许多答案,但找不到适用于我下面观点的方法

class ViewController: UIViewController {

    lazy var scrollView = UIScrollView(frame: .zero)
    lazy var usernameTF = createTextField(nil, placeholder: "username", type: .emailAddress)
    lazy var passwordTF = createTextField(nil, placeholder: "password", type: .default, isSecureEntry: true)

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        view.backgroundColor = .white

        [scrollView, usernameTF, passwordTF].forEach { $0.translatesAutoresizingMaskIntoConstraints = false }

        view.addSubview(scrollView)

        [usernameTF, passwordTF].forEach { scrollView.addSubview($0) }

        NSLayoutConstraint.activate([
            scrollView.topAnchor.constraint(equalTo: view.topAnchor),
            scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
            scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor),

            usernameTF.topAnchor.constraint(equalTo: scrollView.topAnchor, constant: 32),
            usernameTF.widthAnchor.constraint(equalTo: scrollView.widthAnchor, constant: -32),
            usernameTF.heightAnchor.constraint(equalToConstant: 40),
            usernameTF.centerXAnchor.constraint(equalTo: scrollView.centerXAnchor),

            passwordTF.topAnchor.constraint(equalTo: usernameTF.bottomAnchor, constant: 1600),
            passwordTF.widthAnchor.constraint(equalTo: scrollView.widthAnchor, constant: -32),
            passwordTF.heightAnchor.constraint(equalToConstant: 40),
            passwordTF.centerXAnchor.constraint(equalTo: scrollView.centerXAnchor)
        ])
    }

    func createTextField(_ delegate: UITextFieldDelegate?, placeholder: String, type: UIKeyboardType, isSecureEntry: Bool = false) -> UITextField {
        let tf = UITextField(frame: .zero)

        tf.placeholder = placeholder
        tf.backgroundColor = .init(white: 0, alpha: 0.03)
        tf.borderStyle = .roundedRect
        tf.font = .systemFont(ofSize: 14)
        tf.keyboardType = type
        tf.autocapitalizationType = .none
        tf.autocorrectionType = .no
        tf.isSecureTextEntry = isSecureEntry

        if let delegate = delegate {
            tf.delegate = delegate
        }

        return tf
    }
}

【问题讨论】:

    标签: swift uiscrollview autolayout


    【解决方案1】:

    您需要添加将密码TF底部连接到滚动视图底部的底部锚点。这样滚动视图就可以计算出它的内容高度。

    passwordTF.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor)
    

    【讨论】:

    • 非常感谢 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多