2016-11-26 4 views
1

Я создал пользовательский UIView, и внутри представления я пытаюсь добавить несколько элементов пользовательского интерфейса, используя UIStackView.Использование программ просмотра стека

Внутри IB я добавил представление, а затем установил пользовательский класс в качестве своего пользовательского UIView.

UIStackView не привязан к UIView. Я добавил его, вместо этого UIStackView появляется привязанным к началу координат. Кроме того, я могу видеть это только в иерархии представления отладки. На самом деле он не показывает ни одну из табличек или кнопок, я просто вижу пунктирный серый ящик. enter image description here

enter image description here

Вот настраиваемое представление я создал

import UIKit 

class ParameterControl: UIView { 

private var name : UILabel! 
private var valTf : UITextField! 
private var delta : UITextField! 
private var stepper : UIStepper! 
private var button : UIButton! 

init(frame: CGRect, albumCover: String) { 
    super.init(frame: frame) 
    commonInit() 
} 

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

func commonInit(){ 

    name = UILabel() 
    name.text = "Name" 
    name.backgroundColor = UIColor.blue 

    valTf = UITextField.init() 
    delta = UITextField.init() 
    stepper = UIStepper.init() 
    button = UIButton.init() 

    let stackView = UIStackView(arrangedSubviews: [valTf, delta, stepper, button]) 
    stackView.axis = .horizontal 
    stackView.distribution = .fillEqually 
    stackView.alignment = .fill 
    stackView.spacing = 10 
    stackView.translatesAutoresizingMaskIntoConstraints = false 

    addSubview(stackView) 

    //let viewsDictionary = ["stackView":stackView] 
    //let stackView_H = NSLayoutConstraint.constraints(withVisualFormat: "H:|-20-[stackView]-20-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: viewsDictionary) 
    //let stackView_V = NSLayoutConstraint.constraints(withVisualFormat: "V:|-30-[stackView]-30-|", options: NSLayoutFormatOptions(rawValue:0), metrics: nil, views: viewsDictionary) 
    //self.addConstraints(stackView_H) 
    //self.addConstraints(stackView_V) 

} 

} 

я использую UIStackView неправильно? Цель состоит в том, чтобы иметь возможность создавать массив этих представлений, по одному для каждого из моих параметров. Я не хочу создавать эти представления индивидуально в IB.

+0

Вам нужно добавить ограничения в представление стека, чтобы ограничить его своим супервизором (self в вашем пользовательском классе) – Paulw11

ответ

0

Исключить ограничения в коде и убедиться, что они активированы в представлении стека. Он остается в позиции по умолчанию и фрейме, потому что вы не даете ему никаких ограничений, которые говорят, что он ведет себя иначе. Кроме того, убедитесь, что все ваши элементы имеют действительный фрейм.

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