2017-01-24 5 views
-1

Я создал StackView на main.storyboard, и моя идея состояла в том, чтобы добавить несколько кнопок с постоянным размером 40x40 с изображениями на них (которые первоначально 400x400px, но они должны масштабироваться, чтобы заполнить этот 40x40), и они должны складывают так: (вид стека невидим, но я пометил его красным на рис, его 170x50 пространство в правом верхнем углу, где животные находятся)Добавляя кнопки (с постоянной шириной) программно в UIStackView

the stack view that should be populated with 40x40 buttons

так коротко: все кнопки (с изображениями животных) должны быть одинакового размера 40x40 и заполняться влево (или вправо) с некоторым интервалом, равным 2px между Эм.

В коде я написал:

func setupIcon(iconNumber:Int) -> UIButton{ 
     myImageButton = UIButton() 
     myImageButton.frame = CGRect(x: 0, y: 0, width: 40, height: 40) 
     myImageButton.addTarget(self, action: #selector(self.pressed), for: .touchUpInside) 
     myImageButton.isUserInteractionEnabled = false 
     //myImageButton.backgroundColor = UIColor.gray 

     let widthConstraint = NSLayoutConstraint(item: myImageButton, attribute: NSLayoutAttribute.width, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: 40) 
     let heightConstraint = NSLayoutConstraint(item: myImageButton, attribute: NSLayoutAttribute.height, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: 40) 
     NSLayoutConstraint.activate([widthConstraint, heightConstraint]) 

     switch(iconNumber){ 
     case 0: 
      myImageButton.setImage(UIImage(named: "hamster")!, for: .normal) 
      return myImageButton 
     case 1: 
      myImageButton.setImage(UIImage(named: "dog")!, for: .normal) 
      return myImageButton 

     ... 

     default: 
      myImageButton.setImage(UIImage(named: "hamster")!, for: .normal) 
      return myImageButton 
     } 
    } 

вернуть UIButton который я затем добавить к моему StackView по телефону:

cell.iconStackView.addArrangedSubview(setupIcon(iconNumber: pett.pic)) 

и мои настройки StackView у меня есть:
Axis: Горизонтально
Выравнивание: Центр
Распределение: равноотстояния

Режим Содержание: Left
Семантический: Неизвестно

, но это дает мне такое поведение этих кнопок:

enter image description here

и, как вы видите, есть несколько проблем:
1) ограничения, которые я добавил, больше не работают, когда есть только одна кнопка
2) Я не могу понять, что я должен установить для своих настроек StackView, чтобы они все сближались друг с другом и направо с остальной частью пространства влево пустой

Вы можете помочь мне в том, что делать, чтобы добиться желаемого эффекта на этих кнопках? Спасибо.

примечание: каждая ячейка с этими цифрами «13:00» и т. Д. Имеет различное количество кнопок. Моя цель - иметь всех животных справа, независимо от того, 1 или 3-4. Изображения не должны растягиваться, как собака, или располагаться на расстоянии 2 во втором или третьем ряду.

ответ

0

Не используйте представление стека в этой ситуации. Простые ограничения автоопределения - все, что вам нужно, чтобы выстроить три кнопки на правой стороне.

enter image description here

+0

Но эти кнопки добавляются в код. Как добавить ограничения для динамического содержимого. Точно, если бы я хотел добавить новую иконку (рыбу) в эту 3, как добавить ограничения от Fish на Chameleon? – NikolaM

+0

Просто добавьте их. В чем проблема? – matt