gpt4 book ai didi

ios - UITextField 丢失 firstResponder 恢复帧动画/修改

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:43:19 26 4
gpt4 key购买 nike

我使用以下代码修改框架大小以适应显示/消失的键盘:

- (void)moveCodeViewForKeyboard:(NSNotification*)aNotification up:(BOOL)up {
NSDictionary* userInfo = [aNotification userInfo];
NSTimeInterval animationDuration;
UIViewAnimationCurve animationCurve;
CGRect keyboardEndFrame;

[[userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] getValue:&animationCurve];
[[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] getValue:&animationDuration];
[[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] getValue:&keyboardEndFrame];

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:animationDuration];
[UIView setAnimationCurve:animationCurve];

CGRect newFrame = codeView.frame;
CGRect keyboardFrame = [self.view convertRect:keyboardEndFrame toView:nil];
keyboardFrame.size.height += keyboardToolbar.frame.size.height;
keyboardFrame.size.height += 10;
newFrame.size.height -= keyboardFrame.size.height * (up?1:-1);
codeView.frame = newFrame;

[UIView commitAnimations];
}

此代码对其他一些 subview 重复,这些 subview 在显示/隐藏键盘时进行动画处理。

点击 UITextField 可以正确显示所有动画。但是,如果我随后立即点击 UITextView,则之前已设置动画的所有元素(UIToolbar、UITextView、UIWebView)都会恢复到其原始帧(位置和大小),并且将不再设置动画。如果我在 UITextField 为 firstResponder 时关闭键盘,元素将返回到原始框架但会再次激活。

非常奇怪...

只是因为我认为人们会问:

- (void)textFieldDidEndEditing:(UITextField *)textField
{
NSLog(@"textFieldDidEndEditing");
}

提前致谢!

最佳答案

您的项目是否设置为使用 autolayout ?如果是,则在您使用 Interface Builder 时会自动为您创建约束,并且仅更改组件的框架是不够的,您需要调整对这些组件的约束。您通常通过将约束链接到 IBOutlet 属性并修改它们的 constant 属性来做到这一点。

关于ios - UITextField 丢失 firstResponder 恢复帧动画/修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14575235/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com