gpt4 book ai didi

ios - 更新 textFieldDidBeginEditing 方法中的约束会导致文本弹回

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:01:51 28 4
gpt4 key购买 nike

我有一个 UIView,它包含另一个名为 contentViewUIView 对象。在 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/

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