UITextView returns 插入文本前来源不准确
UITextView returns inaccurate origin before text is inserted
标题几乎说明了一切。我想在 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
的结果不正确,并且 returns 有点向下进入 UITextView 框架,如下所示:
然而,在实际输入文本的那一刻,原点 returns 预期值 viewWillLayoutSubviews
再次被调用,并绘制了一条具有正确方向的新线,如下所示:
如何在输入任何文本之前得到这个正确的来源?为此,我专门在文本视图上方留下了 space,如下所示:
我最终使用了一种解决方法,并通过将状态栏的高度添加到导航栏然后为其添加缓冲区来创建行。
标题几乎说明了一切。我想在 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
的结果不正确,并且 returns 有点向下进入 UITextView 框架,如下所示:
然而,在实际输入文本的那一刻,原点 returns 预期值 viewWillLayoutSubviews
再次被调用,并绘制了一条具有正确方向的新线,如下所示:
如何在输入任何文本之前得到这个正确的来源?为此,我专门在文本视图上方留下了 space,如下所示:
我最终使用了一种解决方法,并通过将状态栏的高度添加到导航栏然后为其添加缓冲区来创建行。