2014-11-29 3 views
3

Я пытаюсь динамически изменять кадр UIButton, но он не работает.Swift - динамически меняет размер UIButton

@IBOutlet weak var button1: UIButton! 

@IBAction func btn_move2_touchupinside(sender: AnyObject, forEvent event: UIEvent) { 
      button1.frame = CGRectMake(0, 0, 100, 100) 
} 

Я предполагаю, что я должен перезагрузить кнопку после изменения рамки. Может ли кто-нибудь помочь?

+1

Есть ли кнопка любой текст? Вы поставили точку останова на эту функцию, чтобы гарантировать ее выполнение? –

+0

Не нужно было перезагружать кнопку после смены рамки, изменение рамки позаботится об этом – BaSha

+0

@ Джей Морган, да, функция выполняется, и кнопка инициализируется в раскадровке – Mega4alik

ответ

2

Автоматический макет препятствует обновлению рамки вашей кнопки. Вот три разных способа, с помощью которых вы можете сделать эту работу максимально простой для настройки:

  1. Отключить автомат. В интерфейсе Builder щелкните на контроллере View. Затем в файле File Inspector в крайнем правом углу снимите отметку Используйте автоматический макет.

  2. Определить свою кнопку программно в ViewDidLoad:

    let button = UIButton.buttonWithType(.System) as UIButton 
    button.frame = CGRectMake(200, 200, 100, 100) 
    button.addTarget(self, action: "btn_move2_touchupinside:forEvent:", forControlEvents: .TouchUpInside) 
    button.setTitle("New Button", forState: .Normal) 
    self.view.addSubview(button) 
    
  3. Настройка 4 ограничений для кнопки (горизонтальное смещение от SuperView ведущего края, вертикальное смещение от верхней направляющей разметки, ширины и высоты). Настройте @IBOutlets для этих ограничений, а затем обновите их свойства constant.

+0

, но без автоматической компоновки я не смогу сделать свое приложение адаптивных к различным устройствам. Есть ли другие способы? – Mega4alik

+0

Мой ответ предоставил 3 отдельных способа, которыми вы могли бы справиться с этим. Только первый включает в себя отключение автоматической компоновки. Посмотрите на 3-е предложение. Я могу подробно рассказать об этом, если хотите. У вас есть только одна кнопка, которую вы хотите изменить или многие? Вы хотите его вырастить или переместить? – vacawama

+0

Попробуйте второе предложение. Просто вырежьте и вставьте предоставленный код в 'viewDidLoad', чтобы создать свою кнопку. – vacawama

-1

Просто используйте этот код будет работать нормально:

button.layer.frame = newFrame 

Или вам нужно будет сбросить центр кнопки:

button.frame = newFrame 
button.center = newCenter 
Смежные вопросы