ios - 编辑 UITextField 时正在重置 UIScrollView

标签 ios iphone swift uiscrollview

我是 Swift 3 的新手,我只注意到我们需要 ScrollView ,因为当我们在文本字段中键入时,键盘可以越过一些小部件,就像在这个视频中一样。 Fixing UITextField-Keyboard Problems (Swift in Xcode) .

但是,即使在以编程方式 ScrollView 之前,我也有一个不幸的行为。我的观点一直被重置到它的初始位置。我做了一个video表现出这种行为。

我找不到关于此问题的提及。有人知道吗?

[编辑]

这是小部件的结构

enter image description here

这是我的 View Controller 代码:

import UIKit
import AVFoundation

class SignUpController: UIViewController, UITextFieldDelegate
{

    @IBOutlet var scrollView: UIScrollView!
    @IBOutlet var stackView: UIStackView!

    @IBOutlet var usernameTextField: UITextField!
    @IBOutlet var passwordTextField: UITextField!
    @IBOutlet var confirmationTextField: UITextField!
    @IBOutlet var emailTextField: UITextField!
    @IBOutlet var phoneTextField: UITextField!
    @IBOutlet var firstNameTextField: UITextField!
    @IBOutlet var lastNameTextField: UITextField!

    @IBOutlet var signUpButton: UIButton!

    var keyboardHeigh:CGFloat!

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        self.scrollView.contentSize = self.stackView.frame.size
        self.scrollView.contentSize.height += self.stackView.frame.minY + 20
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        let textFields :[UITextField] =
            [
                usernameTextField,
                passwordTextField,
                confirmationTextField,
                emailTextField,
                phoneTextField,
                firstNameTextField,
                lastNameTextField,
            ]

        for i in 0..<textFields.count
        {
            textFields[i].delegate = self
            textFields[i].tag = i
        }

        NotificationCenter.default.addObserver(self,
                                               selector: #selector(keyboardWillShow),
                                               name: .UIKeyboardWillShow, object: nil)
    }

    func keyboardWillShow(notification: NSNotification)
    {
        if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue
        {
            keyboardHeigh = keyboardSize.height
        }
    }

    func textFieldShouldReturn(_ textField: UITextField) -> Bool
    {
        // Try to find next responder
        if let nextField = textField.superview?.viewWithTag(textField.tag + 1) as? UITextField
        {
            nextField.becomeFirstResponder()

        }
        else
        {
            // Not found, so remove keyboard.
            textField.resignFirstResponder()

        }

        return false
    }
}

最佳答案

1.你可以使用带有静态单元格的 UItableViewController,

2.将 textField 放在单元格中。

3.选择无单元格。

4.不设置分隔符

它会很好地工作。

关于ios - 编辑 UITextField 时正在重置 UIScrollView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43680702/

相关文章:

ios - 如果可见,UICollectionViewCell 不更新图像

ios - 从字符串中提取货币和价格值

iphone - 添加权利文件时,权利无效 0xE8008016

ios - 垂直对齐 UILabel 中的文本 (xcode)

ios - Collection view Flow layout 类似于 Apple Store Application

ios - 我的 AVPlayer 不应该从最后一点恢复到 LIVE Streaming

ios - 如何在 UITableView 中制作最后的页脚?

ios - 使用 Parse iOS SDK 检查用户是否具有有效的自动续订订阅

iphone - 如何在 iPhone 相机应用程序中使用各种效果或滤镜

swift - NSPopover 中的 NSTableview 看起来与独立的不同