Создайте три столбца, используя язык визуального форматирования (Swift)

Я пытаюсь создать представление со следующим макетом, используя VFL (язык визуального форматирования)

-------------------------------------------------
| [LeftView] [CenterView] [RightView] |
-------------------------------------------------

Но это проявляется вот так

-------------------------------------------------
| [LeftView]                         [RightView]|
-------------------------------------------------

Я думаю, что проблема с этой линией

H:|-10-[cancel(70)]-[title]-[save(70)]-10-|

Вот остальная часть кода, я не знаю, что я делаю неправильно. Вот мой код:

    let headerView = UIView(frame: CGRectMake(0,0,mainFrame.width, headerHeight))
    headerView.backgroundColor = BG_COLOR
    self.addSubview(headerView)

    let cancelButton = UIButton(type: .Custom)
    cancelButton.translatesAutoresizingMaskIntoConstraints = false
    cancelButton.setTitle("Cancel", forState: .Normal)
    cancelButton.addTarget(self, action: "cancelButtonClick:", forControlEvents: .TouchUpInside)
    headerView.addSubview(cancelButton)

    let titleLabel = UILabel()
    titleLabel.text = "Bedroom"
    titleLabel.textColor = UIColor.whiteColor()
    headerView.addSubview(titleLabel)

    let saveButton = UIButton(type: .Custom)
    saveButton.titleLabel?.textAlignment = NSTextAlignment.Right
    saveButton.translatesAutoresizingMaskIntoConstraints = false
    saveButton.setTitle("Save", forState: .Normal)
    saveButton.addTarget(self, action: "saveButtonClick:", forControlEvents: .TouchUpInside)
    headerView.addSubview(saveButton)

    let views = ["title":titleLabel, "cancel":cancelButton,"save":saveButton,"header":headerView]

    headerView.addConstraints(
        NSLayoutConstraint.constraintsWithVisualFormat(
            "V:|[save]|",
            options:[.AlignAllCenterY],
            metrics:nil,
            views:views)
    )

    headerView.addConstraints(
        NSLayoutConstraint.constraintsWithVisualFormat(
            "V:|[cancel]|",
            options:[.AlignAllCenterY],
            metrics:nil,
            views:views)
    )

    headerView.addConstraints(
        NSLayoutConstraint.constraintsWithVisualFormat(
            "V:|[title]|",
            options:[.AlignAllCenterY],
            metrics:nil,
            views:views)
    )

    headerView.addConstraints(
        NSLayoutConstraint.constraintsWithVisualFormat(
            "H:|-10-[cancel(70)]-[title]-[save(70)]-10-|",
            options:[.AlignAllCenterY],
            metrics:nil,
            views:views)
    )

1 ответ

Ваш код выглядит хорошо. Из явления, которое вы описываете, центральный вид не виден. Это может иметь несколько причин.

  • У него нет контента.
  • Вы устанавливаете hidden собственность где-то.
  • Вы установили alpha свойство к нулю.
  • Вы переопределяете макет в layoutSubviews,
  • Текст метки имеет тот же цвет, что и фон.

Как и многие другие причины... Во всяком случае, это не эта линия VFL.

Другие вопросы по тегам