그것은 확실히 가능하며 절반에 대한 코드를 줄일 수를 사용하는 방법의 예입니다. 다음 예제는 많은 양산을 위해 자동 레이아웃을 사용합니다.
NSNotificationCenter.defaultCenter().addObserverForName(
UIKeyboardWillChangeFrameNotification,
object: nil,
queue: nil
) { (notification) in
var userInfo = notification.userInfo!
let frameEnd = userInfo[UIKeyboardFrameEndUserInfoKey]!.CGRectValue
let convertedFrameEnd = self.view.convertRect(frameEnd, fromView: nil)
let heightOffset = self.view.bounds.size.height - convertedFrameEnd.origin.y
self.messageFieldBottomConstraint.constant = heightOffset
let curve = userInfo[UIKeyboardAnimationCurveUserInfoKey]!.unsignedIntValue
let options = UIViewAnimationOptions(rawValue: UInt(curve) << 16)
UIView.animateWithDuration(
userInfo[UIKeyboardAnimationDurationUserInfoKey]!.doubleValue,
delay: 0,
options: options,
animations: {
self.view.layoutIfNeeded()
},
completion: nil
)
}
self.messageFieldBottomConstraint
내보기 하단에 내 텍스트 필드의 바닥을 결합하는 NSLayoutConstraint
이다. 이 코드는 키보드가 나타나면 필드를 위로 움직이고 필드가 사라지면 아래로 움직입니다.
이 모두는 UIKeyboardWillShowNotification
과 UIKeyboardWillHideNotification
의 조합을 사용하여 iOS < 8에서 가능했습니다. 그러나! 말하자면, iOS 8에는 사용자가 축소하거나 확장 할 수있는 QuickType 섹션이 있습니다. 이 솔루션은 QuickType이 열려 있는지 여부에 관계없이 텍스트 필드가 키보드 상단에 항상 부착되도록 텍스트 필드를 올바르게 애니메이션합니다.
좋습니다. 건배 – Fattie
스크롤 할 때 제어 할 수있는 방법이 있습니까? 아이폰 6에서는 사용자가 가장 많은 텍스트 필드를 편집 할 때 필드를 스크롤 할 필요가 없지만 하단 텍스트 필드를 편집 할 때 스크롤해야만 공간을 확보 할 수 있습니다. –
'UIViewAnimationOptions (UInt (curve)) '의 사용법이 맞습니까? 문서는'curve'는'UIViewAnimationCurve'라고 정의하고 있으며 정의를 보면'UIViewAnimationOptions'의 값과 일치하지 않습니다. 더 좋게도,이 알림에서 실제로 반환되는'curve' 값은 private/undefined 값이므로 '7'입니다. 따라서 간단한 switch 문을 사용하면 전환하지 않아도됩니다. –