在我的应用中,我已登录此屏幕:
在第一个测试区域上方我有一个图像,Interface Builder中的配置如下:
现在,当我点击UITextField时,他们应该向上移动,否则在iPhone 4 / 4s中该字段将被键盘覆盖。 现在我使用以下代码:
-(void)textFieldDidBeginEditing:(UITextField *)textField {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.35f];
CGRect frameView = self.view.frame;
CGRect frameImage = self.imageViewLogo.frame;
CGRect frameTextFieldUsername = self.textFieldUsername.frame;
CGRect frameTextFieldPassword = self.textFieldPassword.frame;
CGRect frameButtonLogin = self.buttonLogin.frame;
frameView.origin.y = -100;
frameImage.origin.y = -100;
frameTextFieldUsername.origin.y = -100;
frameTextFieldPassword.origin.y = -100;
frameButtonLogin.origin.y = -100;
[self.view setFrame:frameView];
[self.imageViewLogo setFrame:frameImage];
[self.textFieldUsername setFrame:frameTextFieldUsername];
[self.textFieldPassword setFrame:frameTextFieldPassword];
[self.buttonLogin setFrame:frameButtonLogin];
[UIView commitAnimations];
}
当我尝试在模拟器或真实设备上运行应用程序时,视图向上滚动100但图像,文本字段和按钮不会向上滚动...我认为问题取决于约束,你能帮我解决这个问题吗? 谢谢
答案 0 :(得分:4)
您尝试这样做的方式会让您遇到麻烦。当你给出帧的硬编码值时。
尝试使用keyboard avoiding library这是更好,更安全的做法。
答案 1 :(得分:0)
-(void)textFieldDidBeginEditing:(UITextField *)textField {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.35f];
CGRect frameView = self.view.frame;
CGRect frameImage = self.imageViewLogo.frame;
CGRect frameTextFieldUsername = self.textFieldUsername.frame;
CGRect frameTextFieldPassword = self.textFieldPassword.frame;
CGRect frameButtonLogin = self.buttonLogin.frame;
frameView.origin.y = -100;
// no need of changing frames of TextFields inside the View, Just change the y-padding of View
[self.view setFrame:frameView];
[UIView commitAnimations];
}
将y-padding减少到-120并检查
希望这有助于谢谢
答案 2 :(得分:0)
如果您的观点设置为使用AutoLayout,则更改框架将不执行任何操作。
您应订阅UIKeyboardWillChangeFrameNotification
并在那里执行更改。如果存在约束,您可以在此更新约束常量,并在superview上更新调用-setNeedsUpdateConstraints
。
如果你想支持外接键盘,你必须弄清楚键盘是否正在出现或消失。
否则,您可以收听UIKeyboardWillShowNotification
和UIKeyboardWillHideNotification
答案 3 :(得分:0)
嗨,简单易行的诀窍是: -
在你的课程中输入用户名或电子邮件id文本字段的顶部约束的出口并在文本字段上开始编辑委托减少约束的常量值,这样当你选择文本字段时它会上升并且在textField上再次结束编辑委托设置约束的常量值为前一个,因此它将重置在前一个位置。
例如: - 假设您在Storyboard中设置Top Constraint值为150
-(void)textFieldDidBeginEditing:(UITextField *)textField {
_topConstraint.constant = 10.00;
[UIView animateWithDuration:0.5f animations:^{
[self.view layoutIfNeeded];
}];
}
-(void)textFieldDidEndEditing:(UITextField *)textField {
_topConstraint.constant = 150.00;
[UIView animateWithDuration:0.5f animations:^{
[self.view layoutIfNeeded];
}];
}
希望它会对你有所帮助。
答案 4 :(得分:0)
要自动启动textFields
,键盘不需要使用thirdParty类。
创建静态tableView
并设计每个静态单元格中的每个textFields
和按钮。
当键盘出现时,TableView
会自动处理自动加注textFields
。