私は現在Swift 3を使ってiPhone用のアプリを開発中ですが、スクロールビューの問題が発生しました。 テキストフィールドを選択してキーボードを表示する前に、スクロールビューは正常に動作します(つまり、上下にスクロールすることができます)。ただし、キーボードを解除した後、スクロールビューでスクロールできなくなりました。 注:テキストフィールドを再度選択してキーボードを表示させると、正常に動作し、再度終了すると機能が停止します。UIScrollViewはキーボードのスクロールを止めます
スクロールビューのisScrollEnabledプロパティがチェックされており、有効になっているようです。残念ながら、私はまだスクロールビューのすべての細部に精通していないので、なぜそれが動作を停止したのか理解できないようです。
私がどこから見えるかについての助けや助言をいただければ幸いです。
編集:そこにコードのかなりがあるが、ここでビューとキーボードをスクロールする関連絞り込まれた部分である:
class ScrollViewController: UIViewController, UITextViewDelegate, UITextFieldDelegate {
//Scroll view
@IBOutlet weak var scrollView: UIScrollView!
//UIView inside the scroll view
@IBOutlet weak var contentView: UIView!
//Save button on the top right corner
@IBOutlet weak var saveButton: UIBarButtonItem!
//Text field being editted
var activeTextField:UITextField?
fileprivate var contentInset:CGFloat?
fileprivate var indicatorInset:CGFloat?
override func viewDidLoad() {
contentInset = scrollView.contentInset.bottom
indicatorInset = scrollView.scrollIndicatorInsets.bottom
NotificationCenter.default.addObserver(self,
selector: #selector(ScrollViewController.keyboardWillShow(_:)),
name: NSNotification.Name.UIKeyboardWillShow,
object: nil)
NotificationCenter.default.addObserver(self,
selector: #selector(ScrollViewController(_:)),
name: NSNotification.Name.UIKeyboardWillHide,
object: nil)
}
func adjustInsetForKeyboardShow(_ show: Bool, notification: Notification) {
let userInfo = notification.userInfo ?? [:]
let keyboardFrame = (userInfo[UIKeyboardFrameBeginUserInfoKey] as! NSValue).cgRectValue
let adjustmentHeight = (keyboardFrame.height + 20) * (show ? 1 : -1)
scrollView.contentInset.bottom = (contentInset! + adjustmentHeight)
scrollView.scrollIndicatorInsets.bottom = (indicatorInset! + adjustmentHeight)
}
func keyboardWillShow(_ notification: Notification) {
adjustInsetForKeyboardShow(true, notification: notification)
}
func keyboardWillHide(_ notification: Notification) {
adjustInsetForKeyboardShow(false, notification: notification)
}
//Tap gesture to dismiss the keyboard
@IBAction func hideKeyboard(_ sender: AnyObject) {
self.view.endEditing(false)
}
deinit {
NotificationCenter.default.removeObserver(self);
}
}
コードが役に立ちます。 – raidfive
キーボードが表示されると、スクロールビューの境界が変更される可能性があります。 – carbonr