gpt4 book ai didi

iphone - UITextField 不会在重新聚焦时更改框架

转载 作者:行者123 更新时间:2023-11-29 04:19:11 25 4
gpt4 key购买 nike

我遇到了一个特殊的问题。我有一个包含两个 UITextFields 的 View ,它们的宽度开始为 280px。在焦点上,我希望它们缩短以显示一个按钮 - 我使用以下代码来做到这一点:

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
CGRect revealButton = CGRectMake(textField.frame.origin.x, textField.frame.origin.y, 221, textField.frame.size.height);

[UIView beginAnimations:nil context:nil];
textField.frame = revealButton;
[UIView commitAnimations];
NSLog(@"%f",textField.frame.size.width);
}

编辑结束后,它们应该返回到原始框架:

- (void)textFieldDidEndEditing:(UITextField *)textField
{
CGRect hideButton = CGRectMake(textField.frame.origin.x, textField.frame.origin.y, 280, textField.frame.size.height);

[UIView beginAnimations:nil context:nil];
textField.frame = hideButton;
[UIView commitAnimations];
}

我第一次聚焦文本字段时,效果非常好。但是,如果我在聚焦其他内容后聚焦第一个文本字段(例如,如果我首先聚焦第一个文本字段,然后聚焦第二个文本字段,然后重新聚焦第一个文本字段,或者如果我首先聚焦第二个文本字段,然后聚焦第一个文本字段),它根本不会改变它的框架。更令人费解的是,它记录221作为其宽度 - 它只是不会在屏幕上显示这一点。此外,这个问题不适用于第二个文本字段。

有什么想法吗?提前致谢...

最佳答案

这很奇怪,我使用两个具有完全相同代码的文本字段进行了快速测试,并且每次都有效。

我建议删除文本字段和连接并重建它们。清理所有目标并重试。

根据您的评论进行编辑:

如果您使用自动布局,则不得直接修改文本字段的框架。 UI元素的实际框架是由系统计算的。

出于您的目的,我建议为每个文本字段设置宽度限制。确保除了宽度约束之外,仅具有左右间距约束,而不是同时具有两者。要为其设置动画,请使用以下代码:

- (NSLayoutConstraint *)widthConstraintForView:(UIView *)view
{
NSLayoutConstraint *widthConstraint = nil;

for (NSLayoutConstraint *constraint in textField.constraints)
{
if (constraint.firstAttribute == NSLayoutAttributeWidth)
widthConstraint = constraint;
}

return widthConstraint;
}

- (void)animateConstraint:(NSLayoutConstraint *)constraint toNewConstant:(float)newConstant withDuration:(float)duration
{
[self.view layoutIfNeeded];
[UIView animateWithDuration:duration animations:^{
constraint.constant = newConstant;
[self.view layoutIfNeeded];
}];
}


- (void)textFieldDidBeginEditing:(UITextField *)textField
{
float newWidth = 221.0f;

NSLayoutConstraint *widthConstraint = [self widthConstraintForView:textField];

[self animateConstraint:widthConstraint toNewConstant:newWidth withDuration:0.5f];
}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
float newWidth = 280.0f;

NSLayoutConstraint *widthConstraint = [self widthConstraintForView:textField];

[self animateConstraint:widthConstraint toNewConstant:newWidth withDuration:0.5f];
}

关于iphone - UITextField 不会在重新聚焦时更改框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13221955/

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