具有底部边框的自定义UITextView

时间:2018-12-17 01:06:59

标签: ios swift uitextview

我正在尝试创建一个自定义UITextView类以添加底部边框。使用以下代码,它不会显示底部边框。我可以通过在情节提要中添加视图并根据需要对其进行操作来获得替代解决方案,但这不是最佳选择,因为我必须在许多地方使用UITextView,因此我需要自定义UITextView类。对于自定义的UITextField,我有类似的代码可以正常工作。

我还需要通过代码更改此边框的颜色。

有帮助吗?

import Foundation
import UIKit

class CustomTextView: UITextView {

    var bottomBorder = UIView()

    init(frame: CGRect) {
        super.init(frame: frame, textContainer: nil)
        self.initialize()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override func awakeFromNib() {
        super.awakeFromNib()
        self.initialize()

        // Setup Bottom-Border
        self.translatesAutoresizingMaskIntoConstraints = false

        bottomBorder = UIView.init(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
        bottomBorder.backgroundColor = .red
        bottomBorder.translatesAutoresizingMaskIntoConstraints = false

        addSubview(bottomBorder)

        bottomBorder.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true
        bottomBorder.leftAnchor.constraint(equalTo: leftAnchor).isActive = true
        bottomBorder.rightAnchor.constraint(equalTo: rightAnchor).isActive = true
        bottomBorder.heightAnchor.constraint(equalToConstant: 1).isActive = true // Set Border-Strength
    }

    func initialize() {
    }

}

2 个答案:

答案 0 :(得分:2)

您必须在bottomBorder中添加superview

所以用新的一行替换下一行。

addSubview(bottomBorder)

self.superview!.addSubview(bottomBorder)

您的文本视图中将出现红色边框。

答案 1 :(得分:0)

由于您要做的只是添加底部边框,因此可以根据需要直接将其添加到UITextView中。您可以将其作为InspectableVar进行操作,以便可以在情节提要的“属性”选项卡中为每个textview设置它。

private var borders = [UITextView: Bool]()

extension UITextView {

  @IBInspectable var showBottomBorder: Bool {
    get {
      guard let b = borders[self] else {
        return true
      }
      return b
    }
    set {
      borders[self] = newValue
      setUpBottomBorder()
    }
  }

  func setUpBottomBorder(){
    let border = UIView()

    border.translatesAutoresizingMaskIntoConstraints = false
    border.backgroundColor = UIColor.red
    self.addSubview(border)

    border.heightAnchor.constraint(equalToConstant: 1).isActive = true
    border.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true
    border.leadingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true
    border.trailingAnchor.constraint(equalTo: self.trailingAnchor).isActive = true
  }
}