2016-09-30 6 views
0

У меня возникла проблема с использованием якорей в быстрой модификации UIButton и UILabel.Авторезисторные анкеры не устанавливают подзоны в углы

мой взгляд прямо сейчас:

My view right now

Я хочу этикетки и кнопки, чтобы заполнить весь вид и оставить оставить пустое пространство («OpenSpace») между ними. Вот мой код:

import UIKit 

class standardLabel: UIView { 

    private var label: UILabel! 
    private var button: UIButton! 

    let openSpace: CGFloat = 4.0 

    required init?(coder aDecoder: NSCoder) { 

     super.init(coder: aDecoder) 

     label = UILabel() 
     button = UIButton() 

     label.backgroundColor = cLightBlue 
     label.textColor = cWhite 
     label.textAlignment = .center 
     label.font = fBigFont 
     button.backgroundColor = cWhite 
     button.setTitleColor(cDarkBlue, for: .normal) 
     button.titleLabel?.font = fBigCleanFont 

     label.translatesAutoresizingMaskIntoConstraints = false 
     button.translatesAutoresizingMaskIntoConstraints = false 

     addSubview(label) 
     addSubview(button) 

     setConstraints() 

     //layer.masksToBounds = true 
     //layer.cornerRadius = cornerRad 
     backgroundColor = UIColor.brown//superview?.backgroundColor 
    } 

    func setTextLabel(text: String) -> Void { 
     label.text = text 
    } 

    func setTextButton(text: String) -> Void { 
     button.setTitle(text, for: .normal) 
    } 

    private func setConstraints() -> Void { 
     let margins = layoutMarginsGuide 

     label.topAnchor.constraint(equalTo: margins.topAnchor).isActive = true 
     label.bottomAnchor.constraint(equalTo: margins.bottomAnchor).isActive = true 
     label.leadingAnchor.constraint(equalTo: margins.leadingAnchor).isActive = true 
     button.topAnchor.constraint(equalTo: margins.topAnchor).isActive = true 
     button.bottomAnchor.constraint(equalTo: margins.bottomAnchor).isActive = true 
     button.trailingAnchor.constraint(equalTo: margins.trailingAnchor).isActive = true 


     label.trailingAnchor.constraint(equalTo: button.leadingAnchor, constant: openSpace).isActive = true 
     label.widthAnchor.constraint(equalTo: button.widthAnchor).isActive = true 
    } 
} 

ли я сделать ошибку установки якоря или же это порождают проблемы, потому что я создал отдельный класс?

+0

Как вы добавляете это для просмотра контроллера? –

+1

У меня есть viewcontroller с uiscrollview внутри. В scrollview я вставил отдельный вид с выходом и инициализировал его как «стандартную метку». Вы понимаете, или вы хотите, чтобы я отправил скриншот моей установки? –

+0

Если вы не хотите видеть коричневые части, используйте self вместо layoutMarginsGuide. –

ответ

0

Я пробовал ваш код, и все отлично, я только что обнаружил, что между двумя видами есть 4,0, но поскольку цвет кнопки белый, вы не можете видеть расстояние между меткой и кнопкой.

Попробуйте увеличить расстояние до 20.0, вы узнаете разницу.

+0

Я пробовал, и все работает отлично. Проблема заключалась в том, что вместо «self» вместо ограничений «self.layoutMarginsGuide» устанавливались ограничения. Теперь 'UILabel' и' UIButton' заполняют представление! Спасибо за помощь –

0

Установка фиксаторов, равная self, вместо self.layoutMarginsGuide устранит проблему.