- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 UIView
,它包含另一个名为 contentView
的 UIView
对象。在 contentView
中,我有几个 UITextField
对象。为了使当前编辑的 UITextField
始终可见并且不会被键盘隐藏,我正在更改 textFieldDidBeginEditing:
中 contentView
的约束:方法。这意味着 contentView 在父级 UIView
中上下滑动,并保持相关的 UITextField
可见。这部分工作正常,但这里有一个代码片段:
- (void)textFieldDidBeginEditing:(UITextField *)textField
//offset calculation removed for clarity
NSInteger offset = ....
self.contentViewTopConstraint.constant = -offset;
self.contentViewBottomConstraint.constant = offset;
[self.view setNeedsUpdateConstraints];
[UIView animateWithDuration:0.3 animations:^{
[self.view layoutIfNeeded];
}];
}
我注意到,如果我在第一个 UITextField
中键入一些文本,然后点击第二个 UITextField
,第一个 UITextField
中的文本code> 向上跳,然后再次向下跳。如果我在上面的代码片段中禁用动画,这种行为就会消失。所以我的猜测是,在编辑 UITextField
时,设置了一些其他约束,然后随着焦点从 UITextField
移开而改变。当我告诉 View 以动画方式更新它的约束时,这会导致文本四处移动。
有什么方法可以避免这种情况,但仍然保持上下移动 contentView 的动画?
编辑:在我更新任何约束之前添加一个额外的[self.view layoutIfNeeded]
调用解决了这个问题。我仍然不确定可能发生了什么,或者为什么会修复它。任何人都有任何见解?
最佳答案
从那以后,我了解到为约束设置动画的正确方法是这样的:
- (void)textFieldDidBeginEditing:(UITextField *)textField
//offset calculation removed for clarity
NSInteger offset = ....
[self.view layoutIfNeeded];
self.contentViewTopConstraint.constant = -offset;
self.contentViewBottomConstraint.constant = offset;
[UIView animateWithDuration:0.3 animations:^{
[self.view layoutIfNeeded];
}];
}
这解决了我遇到的问题。
关于ios - 更新 textFieldDidBeginEditing 方法中的约束会导致文本弹回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29161006/
我有一个 View ,我正在以这样的方式对其进行动画处理,使其扩展并移动到 View Controller 中的一组新坐标。我正在使用关键帧执行此操作: UIView.animateKeyframes
我有一个以视频为背景的UIView。当我呈现另一个 subview ,然后弹回到包含视频的 subview 时,会发生这种情况: Video [11 seconds] (保留视频,因为 GIF 不具有
首先,这是一些代码: - (void)viewDidLoad { [super viewDidLoad]; FirstViewController *first = [[FirstVi
我是一名优秀的程序员,十分优秀!