gpt4 book ai didi

ios - 在子类中实现 textRectForBounds 和 editingRectForBounds 后,UITextField 没有滚动到末尾?

转载 作者:IT王子 更新时间:2023-10-29 08:03:43 25 4
gpt4 key购买 nike

我有一个 UITextField 子类,我正在其中实现以下方法:

- (CGRect)textRectForBounds:(CGRect)bounds {

return CGRectInset(bounds , 30, 7);
}

-(CGRect) editingRectForBounds:(CGRect)bounds {
return CGRectInset(bounds , 30, 7);
}

由于这两种方法,当输入的文本大于 UITextField 的宽度时,UITextField 不会滚动到末尾。有什么解决办法吗?

最佳答案

它不起作用只是因为您在 UITextField 中声明的文本的字体大小和您正在应用的 CGRectInset。实际上它应该根据您设置的字体大小。例如,对于 14.0 的字体大小,只需更改您的方法如下:

- (CGRect)textRectForBounds:(CGRect)bounds {
return CGRectInset(bounds , 30, 6);
}
-(CGRect) editingRectForBounds:(CGRect)bounds {
return CGRectInset(bounds , 30, 6);
}

原因是文字的绘制矩形。例如,当我们将 UITextField 的字体大小设置为 14.0 时,它至少需要 18.0 的高度才能调整框架中的文本。所以它需要在文本周围额外增加 4 个像素,你可以说它覆盖框架。因此,在您的情况下,这种情况并不令人满意,因为据我猜测您已将字体大小调整为 14.0,默认情况下 UITextField 的框架高度为 30.0,并且您的边缘 mask 为每边 7.0,这意味着总计 14.0。所以你的文本 rect 返回 16.0 这反过来阻止操作系统更新文本框架,因为它在图形上下文之外。我希望你清楚。

更好的答案如下:

- (CGRect)textRectForBounds:(CGRect)bounds {
return CGRectInset(bounds , 30, (30 - self.font.pointSize - 4)/2);
}

-(CGRect) editingRectForBounds:(CGRect)bounds {
return CGRectInset(bounds , 30, (30 - self.font.pointSize - 4)/2);
}

关于ios - 在子类中实现 textRectForBounds 和 editingRectForBounds 后,UITextField 没有滚动到末尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18985367/

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