这是我的全部代码,当键盘出现时,它隐藏了前1个文本字段,而其中一半可见。它可以工作,但是当它隐藏顶部字段时,看起来就像是有线的。

我在网上找到了此代码,但无法修复。

class ViewController2: UIViewController, ENSideMenuDelegate, UITextFieldDelegate {

@IBOutlet weak var text1: UITextField!
@IBOutlet weak var text2: UITextField!
@IBOutlet weak var text3: UITextField!
@IBOutlet weak var text4: UITextField!
@IBOutlet weak var scrollview: UIScrollView!

var activeTextField: UITextField!

@IBOutlet weak var container_view: UIView!

override func viewDidLoad() {
    super.viewDidLoad()
    //Move next line to viewWillAppear functon if you store your view controllers
    self.sideMenuController()?.sideMenu?.delegate = self
    // Do any additional setup after loading the view.

    self.text1.delegate = self
    self.text2.delegate = self
    self.text3.delegate = self
    self.text4.delegate = self
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

// MARK: - ENSideMenu Delegate
func sideMenuWillOpen() {
    println("sideMenuWillOpen")
}

func sideMenuWillClose() {
    println("sideMenuWillClose")
}

func sideMenuDidClose() {
    println("sideMenuDidClose")
}

func sideMenuDidOpen() {
    println("sideMenuDidOpen")
}

/*
func sideMenuShouldOpenSideMenu() -> Bool {
    println("sideMenuShouldOpenSideMenu")
    return false
}
*/

// MARK: - Keyboard

// Call this method somewhere in your view controller setup code.
func registerForKeyboardNotifications() {
    let notificationCenter = NSNotificationCenter.defaultCenter()
    notificationCenter.addObserver(self,
        selector: "keyboardWillBeShown:",
        name: UIKeyboardWillShowNotification,
        object: nil)
    notificationCenter.addObserver(self,
        selector: "keyboardWillBeHidden:",
        name: UIKeyboardWillHideNotification,
        object: nil)
}

func unregisterFromKeyboardNotifications () {
    let center:  NSNotificationCenter = NSNotificationCenter.defaultCenter()
    center.removeObserver(self, name: UIKeyboardDidShowNotification, object: nil)
    center.removeObserver(self, name: UIKeyboardWillHideNotification, object: nil)
}

private func stopObservingKeyboardEvents() {
    NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillShowNotification, object: nil)
    NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillHideNotification, object: nil)
}

// Called when the UIKeyboardDidShowNotification is sent.
func keyboardWillBeShown(sender: NSNotification) {

    let info: NSDictionary = sender.userInfo!
    let value: NSValue = info.valueForKey(UIKeyboardFrameBeginUserInfoKey) as! NSValue
    let keyboardSize: CGSize = value.CGRectValue().size
    let contentInsets: UIEdgeInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardSize.height, 0.0)
    scrollview.contentInset = contentInsets
    scrollview.scrollIndicatorInsets = contentInsets

    // If active text field is hidden by keyboard, scroll it so it's visible
    // Your app might not need or want this behavior.

    var aRect: CGRect = self.view.frame
    aRect.size.height -= keyboardSize.height + 80

let activeTextFieldRect: CGRect? = activeTextField?.frame
    let activeTextFieldOrigin: CGPoint? = activeTextFieldRect?.origin
    if (!CGRectContainsPoint(aRect, activeTextFieldOrigin!)) {
        scrollview.scrollRectToVisible(activeTextFieldRect!, animated:true)
    }
}

// Called when the UIKeyboardWillHideNotification is sent
func keyboardWillBeHidden(sender: NSNotification) {
    let contentInsets: UIEdgeInsets = UIEdgeInsetsZero
    scrollview.contentInset = contentInsets
    scrollview.scrollIndicatorInsets = contentInsets
}

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    self.registerForKeyboardNotifications()
}

override func viewDidDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    NSNotificationCenter.defaultCenter().removeObserver(self)
}

// MARK: -  Text Field

func textFieldDidBeginEditing(textField: UITextField) {
    self.activeTextField = textField
}

func textFieldDidEndEditing(textField: UITextField) {
    self.activeTextField = nil
}
}

最佳答案

而不是这样做

var aRect: CGRect = self.view.frame
aRect.size.height -= keyboardSize.height + 80


做这个

self.view.frame.y -= keyboardSize.height + 80


(不知道80是什么,但是我把它保留在那里,以防它影响了您的应用程序。)

.height属性将拉伸框架,而.y属性将移动框架。

关于ios - iOS快速出现在键盘上时它隐藏了前2个TextField,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32225617/

10-10 04:14