   public var fretboard = Fretboard()
 
   @IBInspectable public var isDrawNoteName: Bool = true { didSet { redraw() }}
+  @IBInspectable public var isDrawStringName: Bool = true { didSet { redraw() }}
   @IBInspectable public var isDrawFretNumber: Bool = true { didSet { redraw() }}
   @IBInspectable public var isChordModeOn: Bool = false { didSet { redraw() }}
   @IBInspectable public var fretWidth: CGFloat = 5 { didSet { redraw() }}

    @IBInspectable public var fretColor: UIColor = .darkGray { didSet { redraw() }}
    @IBInspectable public var noteColor: UIColor = .black { didSet { redraw() }}
    @IBInspectable public var noteTextColor: UIColor = .white { didSet { redraw() }}
  #elseif os(OSX)
    @IBInspectable public var stringColor: NSColor = .black { didSet { redraw() }}
    @IBInspectable public var fretColor: NSColor = .darkGray { didSet { redraw() }}
    @IBInspectable public var noteColor: NSColor = .black { didSet { redraw() }}
    @IBInspectable public var noteTextColor: NSColor = .white { didSet { redraw() }}
  #endif

  private var fretViews: [FretView] = []

  // MARK: Init


  // MARK: Draw

  private func draw() {
    let gridWidth = frame.size.width / (CGFloat(fretboard.direction == .horizontal ? fretboard.count : fretboard.tuning.strings.count) + 0.5)
    let gridHeight = frame.size.height / (CGFloat(fretboard.direction == .horizontal ? fretboard.tuning.strings.count: fretboard.count) + 0.5)

    // String label size
    var stringLabelSize = CGSize()
    if isDrawStringName {
      let horizontalSize = CGSize(
        width: gridWidth / 2,
        height: gridHeight)

      let verticalSize = CGSize(
        width: gridWidth,
        height: gridHeight / 2)

      stringLabelSize = fretboard.direction == .horizontal ? horizontalSize : verticalSize
    }

    // Fret label size
    var fretLabelSize = CGSize()
    if isDrawFretNumber {
      let horizontalSize = CGSize(
        width: (frame.size.width - stringLabelSize.width) / CGFloat(fretboard.direction == .horizontal ? fretboard.count : fretboard.tuning.strings.count),
        height: gridHeight / 2)

      let verticalSize = CGSize(
        width: gridWidth / 2,
        height: (frame.size.height - stringLabelSize.height) / CGFloat(fretboard.direction == .horizontal ? fretboard.tuning.strings.count : fretboard.count))

      fretLabelSize = fretboard.direction == .horizontal ? horizontalSize : verticalSize
    }

    // Fret view size
    let horizontalSize = CGSize(
      width: (frame.size.width - stringLabelSize.width) / CGFloat(fretboard.count),
      height: (frame.size.height - fretLabelSize.height) / CGFloat(fretboard.tuning.strings.count))

    let verticalSize = CGSize(
      width: (frame.size.width - fretLabelSize.width) / CGFloat(fretboard.tuning.strings.count),
      height: (frame.size.height - stringLabelSize.height) / CGFloat(fretboard.count))

    var fretSize = fretboard.direction == .horizontal ? horizontalSize : verticalSize

    // Layout string labels
    for (index, label) in stringLabels.enumerated() {
      var position = CGPoint()
      switch fretboard.direction {
      case .horizontal:
        #if os(iOS) || os(tvOS)
          position.y = stringLabelSize.height * CGFloat(index)
        #elseif os(OSX)
          position.y = frame.size.height - stringLabelSize.height - (stringLabelSize.height * CGFloat(index))
        #endif
      case .vertical:
        position.x = stringLabelSize.width * CGFloat(index) + fretLabelSize.width
        position.y = frame.size.height - stringLabelSize.height
      }

      label.textLayer.string = NSAttributedString(
        string: "\(fretboard.tuning.strings[index].type)",
        attributes: [
          NSForegroundColorAttributeName: stringLabelColor,
          NSFontNameAttribute: FRFont.systemFont(ofSize: min(stringLabelSize.width, stringLabelSize.height))
        ])
      label.frame = CGRect(origin: position, size: stringLabelSize)
    }

    // Layout fret labels
    for (index, label) in fretLabels.enumerated() {
      var position = CGPoint()
      switch fretboard.direction {
      case .horizontal:
        position.x = (fretLabelSize.width * CGFloat(index)) + stringLabelSize.width
        #if os(iOS) || os(tvOS)
          position.y = frame.size.height - fretLabelSize.height
        #endif
      case .vertical:
        #if os(iOS) || os(tvOS)
          position.y = fretLabelSize.height * CGFloat(index) + stringLabelSize.height
        #elseif os(OSX)
          position.y = frame.size.height - fretLabelSize.height - (fretLabelSize.height * CGFloat(index)) - stringLabelSize.height
        #endif
      }

      label.textLayer.string = NSAttributedString(
        string: "\(fretboard.startIndex + index)",
        attributes: [
          NSForegroundColorAttributeName: fretLabelColor,
          NSFontNameAttribute: FRFont.systemFont(ofSize: min(fretLabelSize.width, fretLabelSize.height))
        ])
      label.frame = CGRect(origin: position, size: fretLabelSize)
    }

    // Layout fret views
    for (index, fret) in fretViews.enumerated() {
      let fretIndex = fret.note.fretIndex
      let stringIndex = fret.note.stringIndex

      // Make 0th fret half of fret size because it is open string.
      if fretboard.startIndex == 0, index == 0 {
        switch fretboard.direction {
        case .horizontal: fretSize.width = fretSize.width / 2
        case .vertical: fretSize.height = fretSize.height / 2
        }
      }

      // Position
      var position = CGPoint()
      switch fretboard.direction {
      case .horizontal:
        #if os(iOS) || os(tvOS)
          position.x = fretSize.width * CGFloat(fretIndex) + stringLabelSize.width
          position.y = fretSize.height * CGFloat(stringIndex)
        #elseif os(OSX)
          position.x = fretSize.width * CGFloat(fretIndex) + stringLabelSize.width
          position.y = frame.size.height - fretSize.height - (fretSize.height * CGFloat(stringIndex))
        #endif
      case .vertical:
        #if os(iOS) || os(tvOS)
          position.x = fretSize.width * CGFloat(stringIndex) + fretLabelSize.width
          position.y = fretSize.height * CGFloat(fretIndex) + stringLabelSize.height
        #elseif os(OSX)
          position.x = fretSize.width * CGFloat(stringIndex) + fretLabelSize.width
          position.y = frame.size.height - fretSize.height - (fretSize.height * CGFloat(fretIndex)) - stringLabelSize.height
        #endif
      }

