在setFrameSize之后,NSTextView未正确调整大小

时间:2015-11-25 02:13:55

标签: swift macos nstextview

在我创建的NSTextView子类中,我想将视图的高度调整为其中文本的高度。为了执行此操作,我使用了Apple建议的在文本视图中计算行数的过程:

private func countln() -> Int {
    var nlines: Int
    var index: Int
    var range = NSRange()
    let nGlyphs = lManager.numberOfGlyphs
    for (nlines = 0, index = 0; index < nGlyphs; nlines++) {
        lManager.lineFragmentRectForGlyphAtIndex(index, effectiveRange: &range)
        index = NSMaxRange(range);
    }
    return nlines
}

此方法按预期工作,并在文本视图中返回正确的行数。问题在于调整视图的大小,我将其插入到文本更改调用的委托方法中:

func textDidChange(notification: NSNotification) {
    let newHeight = CGFloat(28 * countln())
    let ogHeight = self.frame.height
    self.setFrameSize(NSSize(width: self.frame.width, height: newHeight))
    self.setFrameOrigin(NSPoint(x: self.frame.origin.x, y: (self.frame.origin.y - self.frame.height) + ogHeight))
    Swift.print(frame.height)
}

setFrameSize变量函数调整视图的高度,而不是视图中的行数(乘以或多或少是每行文本高度的常量)。一切正常,直到高度变化后,当文本视图的高度变为意外的不正确高度时。我认为频繁重绘视图与我调整大小的方式有关。任何有关如何解决这个不正确的身高调整大小问题的帮助都非常感谢。

提前致谢。

0 个答案:

没有答案