我一直在审查UITextField的文档,其选项比UITextView更受限制。
我遇到了一种情况,我需要通过强制边界框更大来截断文本,因此不存在截断。
我不能只使用.adjustsFontSizeToFitWidth
,因为只有当文本框处于屏幕宽度时才允许此事件。截断是在不是全屏长度的情况下发生的。
现在当用户输入时,我记录每次击键并确保UITextFields框展开以适合文本。但是,如果我使用大字体,文本仍会被切断:
"THIS IS LARGE TEXT GETTING CUT O..."
目前我记录每次击键并运行此代码以调整其大小:
func adjustFrameWidthToFitText()
{
var size = sizeThatFits(CGSizeMake(CGFloat.max,height))
frame = CGRectMake(frame.origin.x, frame.origin.y, size.width + 7, frame.height)
}
但是我仍然在某些地方被切断了。无论如何都要判断文本是否被截断并覆盖导致所述截断的行为?
(Swift& Obj-c中的解决方案欢迎!)
基于下面的答案,我尝试了:
func adjustFrameWidthToFitText()
{
var fontSize = font.pointSize
var atr = [NSFontAttributeName:font]
var textSize = NSString(string: text).sizeWithAttributes(atr)
frame = CGRectMake(frame.origin.x, frame.origin.y, textSize.width, frame.height)
}
但仍有截断
答案 0 :(得分:1)
extension String {
func sizeWithAttributes(atr: NSDictionary) -> CGSize {
return NSString(string: self).sizeWithAttributes(atr)
}
}
let size = textView.text.sizeWithAttributes([NSFontAttribute:textView.font])
这将返回字符串的确切大小,包括' \ n'字符。
您可以根据需要使用尺寸。
<强> ADDED 强>
当我使用CATextLayer时,我必须将其添加到属性中以获取行,但未在UITextView或字段上进行测试:
let style = NSMutableParagraphStyle()
style.lineHeightMultiple = 1.05
..., NSParagraphStyleAttributeName:style])
答案 1 :(得分:0)
经过多次挖掘,我找到了根本原因,并找到了捷径。
快捷方式:
func adjustFrameWidthToFitText()
{
var size = intrinsicContentSize()
frame = CGRectMake(frame.origin.x, frame.origin.y, size.width, frame.height)
}
这给了我文本字段的大小。
我的代码问题是我在将字符添加到文本之前计算调整大小事件。因此,在将最新的击键添加到字符串之前,我的界限总是被计算出来。
当我改变逻辑时
public func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
{
adjustFrameWidthToFitText()
return true
}
要
textFieldDidEndEditing(_:)
{
adjustFrameWidthToFitText()
}
有效。
瞧!