在插入文本之前,UITextView返回不准确的原点

时间:2018-04-11 04:04:14

标签: ios swift uiview uitextview quartz-core

标题几乎说明了一切。我想在UITextView上方添加一行:

  override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    // will be implemented once bug is fixed, but for now is commented out to demonstrate error
    // if topLine == nil || bottomLine == nil {
        addBorders()
    // }
}

func addBorders() {

    let px:CGFloat = 1 / UIScreen.main.scale

    topLine = CAShapeLayer()
    topLine.backgroundColor = UIColor.blue.cgColor
    let barWidth = view.frame.size.width
    topLine.frame = CGRect(x: 0, y: 0, width: barWidth, height: px)
    topLine.frame = CGRect(x: BUFFER, y: questionTextView.frame.origin.y - BUFFER, width: barWidth, height: px)

    view.layer.addSublayer(topLine)

    // ... rest of code ...
}

由于某些奇怪的原因,当UITextView为空时,questionTextView.frame.origin.y的结果不正确,并向下返回UITextView框架,如下所示:

img1

但是,实际输入了时刻文本,原点返回预期值,再次调用viewWillLayoutSubviews,并绘制一个具有正确方向的新行,如下所示:

img2

如何在输入任何文字之前获得此正确的来源?我专门为此目的在文本视图上方留出了空格,如下所示:

img3

1 个答案:

答案 0 :(得分:0)

我最终使用了一种解决方法,并通过将状态栏的高度添加到导航栏然后为其添加缓冲区来创建该行。