【发布时间】:2013-10-19 09:28:55
【问题描述】:
我在计算 UITextField 中显示的 NSString 的准确大小时遇到问题。
我的目标是以编程方式根据字符串大小更新文本字段框架大小(不使用 sizeToFit)。我正在使用 sizeWithFont 功能。
-(void)resizeTextFieldAccordingToText:(NSString*)textFieldString {
CGPoint originalCenter = self.textField.center;
UIFont* currentFont = [textField font];
CGSize newSize = [textFieldString sizeWithFont:currentFont];
//Same incorrect results with the extended version of sizeWithFont, e.g.
//[textFieldString sizeWithFont:currentFont constrainedToSize:CGSizeMake(300.0, 100.0) lineBreakMode:NSLineBreakByClipping];
[self.textField setFrame:(CGRectMake(self.textField.frame.origin.x, self.textField.frame.origin.y, newSize.width, newSize.height))];
[self.textField setCenter:originalCenter];
}
问题:虽然这会返回正确的大小结果,但通过添加字符会变得越来越不精确,因此最终开始剪切字符串(如右侧屏幕截图所示)。
如何获得 textField 字符串的准确大小以正确调整其大小?
【问题讨论】:
-
这篇文章可能对您有用:stackoverflow.com/questions/1435544/…
-
我知道这一点,但即使使用 sizeWithFont 的扩展版本(例如 CGSize newSize = [textFieldString sizeWithFont:currentFont constrainedToSize:CGSizeMake(300.0, 100.0) lineBreakMode:NSLineBreakByClipping];) 也会稍微返回相同的结果尺寸不正确。
-
是的,因为它不考虑填充
-
何时调整文本字段的大小?请记住,委托方法
-textField:shouldChangeCharactersInRange:replacementString:在文本字段的文本实际更改之前 被调用,因此如果您在那里计算新大小,则需要使用NSString的-stringByReplacingCharactersInRange:withString:构建修改后的文本.否则,您的尺寸将始终是一个字符“迟到”。
标签: ios objective-c nsstring uitextfield