Ios 当键盘打开时,为什么我的视图会重置它们的位置?

Ios 当键盘打开时,为什么我的视图会重置它们的位置?,ios,swift,cocoa-touch,Ios,Swift,Cocoa Touch,我的任务是在键盘顶部附加一个文本字段。当键盘向上移动时,文本字段应随之向上移动。但这是行不通的 //编辑:如果我用回车键关闭键盘,文本字段会立即定位在键盘顶部,并随键盘向下移动 这是我的密码: func keyboardWillAppear(notification: NSNotification){ let userInfo:NSDictionary = notification.userInfo! let keyboardSize:CGSize =

我的任务是在键盘顶部附加一个文本字段。当键盘向上移动时,文本字段应随之向上移动。但这是行不通的

//编辑:如果我用回车键关闭键盘,文本字段会立即定位在键盘顶部,并随键盘向下移动

这是我的密码:

    func keyboardWillAppear(notification: NSNotification){
         let userInfo:NSDictionary = notification.userInfo!
         let keyboardSize:CGSize = userInfo.objectForKey(UIKeyboardFrameBeginUserInfoKey)!.CGRectValue.size

         var messageFrame:CGRect = self.textField.frame
         messageFrame.origin.y -= keyboardSize.height
         UIView.animateWithDuration(0.25, animations: {self.textField.frame = messageFrame})

}

func keyboardWillDisappear(notification: NSNotification){
         let userInfo:NSDictionary = notification.userInfo!
         let keyboardSize:CGSize = userInfo.objectForKey(UIKeyboardFrameBeginUserInfoKey)!.CGRectValue.size

         var messageFrame:CGRect = self.textField.frame
         messageFrame.origin.y += keyboardSize.height
         UIView.animateWithDuration(0.25, animations: {self.textField.frame = messageFrame})

}

对这些事情使用标准代码:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
   textField.inputAccessoryView = CustomView;
   return YES;
}

Where CustomView-is UITextField

我对您的代码做了一些更改

func keyboardWillAppear(notification: NSNotification){
         let userInfo:NSDictionary = notification.userInfo!
         let keyboardSize:CGSize = userInfo.objectForKey(UIKeyboardFrameBeginUserInfoKey)!.CGRectValue.size

         CGFloat newY = self.textField.frame.origin.y - keyboardSize.height;
         UIView.animateWithDuration(0.25, animations: {
             self.textField.frame = CGRectMake(self.textField.frame.origin.x, newY , self.textField.frame.size.width, self.textField.frame.size.height);
})

}

不工作意味着什么?提供一个屏幕截图或更多细节。它会制作一个奇怪的“跳跃”动画。查看其他评论以供进一步参考。这似乎不起作用。。我认为打开键盘时文本标签的位置有问题。我尝试在ViewDidAppear方法中通过硬编码的值来设置动画,它工作得很好,但是如果我复制键盘上的代码WillDisplay或textFieldDidStartEditing,则文本字段要么什么也不做,要么快速跳回其原始位置。我使用自动布局顺便说一句。这可能是最好的方式来连接到键盘。但我的目标是与messages应用程序或whatsapp中的行为相同,其中文本字段始终显示在屏幕底部,TableView聊天泡泡也会相应地向上或向下移动,即使在下拉table View时,您也可以尝试使用此供应商-这是消息应用程序的最佳解决方案之一。