2017-02-10 5 views
0

Я пытаюсь реализовать пользовательский элемент управления в соответствии с official docПочему ограничения просмотра в StackView не работают?

Проблема в том, что UIButton объект, помещенный в HorizontalStackVIew заполняет все его пространство, игнорируя свои кнопки ограничения (ширина = 4,0 высота = 4,0). (Я пробовал с VerticalStackVIew и UITextView и другие, но это то же самое)

class MyControl: UIStackView { 

    override init(frame: CGRect) { 
     super.init(frame: frame) 
     setupButtons() 
    } 

    required init(coder: NSCoder) { 
     super.init(coder: coder) 
     setupButtons() 
    } 

    private func setupButtons() { 

     // Create the button 
     let button = UIButton() 
     button.backgroundColor = UIColor.red 

     // Add constraints 
     button.translatesAutoresizingMaskIntoConstraints = false 
     button.heightAnchor.constraint(equalToConstant: 4.0).isActive = true 
     button.widthAnchor.constraint(equalToConstant: 4.0).isActive = true 

     // Add the button to the stack 
     addArrangedSubview(button) 
    } 

И у меня есть этот журнал, но не знаю, что делать с ним:

2017-02-10 16 : 59: 31.900999 MyControl [1835: 91456] [LayoutConstraints] Невозможно одновременно удовлетворить ограничения. Возможно, по крайней мере одно из ограничений в следующем списке - это тот, который вы не хотите. Попробуйте следующее: (1) посмотрите на каждое ограничение и попытайтесь выяснить, чего вы не ожидаете; (2) найти код, который добавил нежелательные ограничения или ограничения и исправить его. ( "", "", "", "" )

будет пытаться восстановить разбив Constraint

сделать символическую точку останова в UIViewAlertForUnsatisfiableConstraints, чтобы поймать это в отладчике. Методы в категории UIConstraintBasedLayoutDebugging в списке UIView, также могут быть полезны. 2017-02-10 16: 59: 31.950461 MyControl [1835: 91456] [LayoutConstraints] Невозможно одновременно удовлетворить ограничениям. Возможно, по крайней мере одно из ограничений в следующем списке - это тот, который вы не хотите. Попробуйте следующее: (1) посмотрите на каждое ограничение и попытайтесь выяснить, чего вы не ожидаете; (2) найти код, который добавил нежелательные ограничения или ограничения и исправить его. ( "", "", "", "" )

будет пытаться восстановить разбив Constraint

сделать символическую точку останова в UIViewAlertForUnsatisfiableConstraints, чтобы поймать это в отладчике. Методы в категории UIConstraintBasedLayoutDebugging в списке UIView, также могут быть полезны.

Xcode 8.2.1

enter image description here

ответ

0

мне удалось создать объект UIStackView и поставить вид (кнопка) в него только программно (создание его путем перетаскивания на раскадровке из библиотеки объектов не удалось)

import UIKit 

class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let stackView = UIStackView() 

     stackView.translatesAutoresizingMaskIntoConstraints = false 

       let button = UIButton() 
       button.translatesAutoresizingMaskIntoConstraints = false 
       button.setTitle("Button", for: .normal) 
       button.backgroundColor = .red 
       stackView.addArrangedSubview(button) 

     view?.addSubview(stackView) 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 
} 

enter image description here

0

Вы можете попробовать это:

class CustomStackView:UIStackView{ 

override init(frame:CGRect){ 
    super.init(frame: frame) 
} 

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

    func setUpButton(){ 
    let button:UIButton = UIButton(type: .custom) 
    button.backgroundColor = .red 
    self.distribution = .fill 
    self.addArrangedSubview(button) 
    } 

} 

Подробнее о stackviewhere:

+0

спасибо за ответ. но это не помогло. потому что это похоже на проблему в представлении стека –

Смежные вопросы