如何制作多行,带下划线的UITextView / UITextField?

时间:2017-01-05 13:16:55

标签: ios iphone swift

我想要一个多行文本输入字段,其外观为带衬纸,每个输入行的下方都有一个下划线,文本将跨越视图的宽度。

例如: example image

这是我想要的设计。行数可能会改变。

我考虑过:

  • 使用UITextView并放置带衬里的背景。
  • 使用TextField并为每个textField加下划线。

这些声音对我来说都没有理智,所以我正在寻找可以让我指向正确方向的其他想法。

2 个答案:

答案 0 :(得分:2)

您可以使用CoreGraphics绘制线条:

class UnderlinedTextView: UITextView {
  var lineHeight: CGFloat = 13.8

  override var font: UIFont? {
    didSet {
      if let newFont = font {
        lineHeight = newFont.lineHeight
      }
    }
  }

  override func draw(_ rect: CGRect) {
    let ctx = UIGraphicsGetCurrentContext()
    ctx?.setStrokeColor(UIColor.black.cgColor)
    let numberOfLines = Int(rect.height / lineHeight)
    let topInset = textContainerInset.top

    for i in 1...numberOfLines {
      let y = topInset + CGFloat(i) * lineHeight

      let line = CGMutablePath()
      line.move(to: CGPoint(x: 0.0, y: y))
      line.addLine(to: CGPoint(x: rect.width, y: y))
      ctx?.addPath(line)
    }

    ctx?.strokePath()

    super.draw(rect)
  }
}

答案 1 :(得分:0)

添加textview委托,然后在确认到UITextViewDelegate委托后使用此

 func scrollViewDidScroll(_ scrollView: UIScrollView) {
      yourTextView.setNeedsDisplay()
}

希望有帮助!