禁用" ..."截断UITextField

时间:2015-01-19 19:42:13

标签: ios objective-c swift uitextfield

我一直在审查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)
}

但仍有截断

2 个答案:

答案 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()
}

有效。

瞧!