Не могу изменить размер UIButton с CGRectMake

У меня есть кнопка с изображением на ней, я использую UIView.animateWithDuration, чтобы назначить новый размер для представления, а также представления изображения.

Представление масштабируется правильно, но нет изменений в представлении изображения

Фрагмент кода:

@IBAction func imageButtonDidTouch(sender: AnyObject) {

    UIView.animateWithDuration(0.7) { 

        /*** Executes Properly ***/
        self.dialogView.frame = CGRectMake(0, 0, self.screenWidth!, self.screenHeight!)

        /*** Does Not Execute ****/
        self.imageButton.frame = CGRectMake(0, 0, self.screenWidth!, 240)


        /*** Executes Properly ***/
        self.likeButton.hidden = true
        self.shareButton.hidden = true
        self.userButton.hidden = true
        self.headerView.hidden = true
        self.dialogView.layer.cornerRadius = 0

    }

}

Снимок экрана до нажатия кнопки:

Снимок экрана после нажатия кнопки:

Ширина экрана и высота экрана были определены в viewDidLoad()

screenWidth = UIScreen.mainScreen().bounds.width
   screenHeight = UIScreen.mainScreen().bounds.height

РЕДАКТИРОВАТЬ 1: объявление imageButton

@IBOutlet weak var imageButton: UIButton!

РЕДАКТИРОВАТЬ 2: я добавил обработчик завершения для функции анимации:

    @IBAction func imageButtonDidTouch(sender: AnyObject) {


    print("Height Before:", self.imageButton.frame.height)
    print("Width Before:",self.imageButton.frame.width)

    UIView.animateWithDuration(0.7, animations: { 

                    /*** Executes Properly ***/
                    self.dialogView.frame = CGRectMake(0, 0, self.screenWidth!, self.screenHeight!)

                    /*** Does Not Execute ****/
                    self.imageButton.frame = CGRectMake(0, 0, self.screenWidth!, 240)


                    /*** Executes Properly ***/
                    self.likeButton.hidden = true
                    self.shareButton.hidden = true
                    self.userButton.hidden = true
                    self.headerView.hidden = true
                    self.dialogView.layer.cornerRadius = 0



        }) { (true) in


            print("Height After:", self.imageButton.frame.height)
            print("Width After:",self.imageButton.frame.width)

    }

}

Скриншот консоли:

Посмотреть иерархию:

1 ответ

Решение

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

Правильное место, чтобы получить UIScreen данные кадра находятся в viewDidLayoutSubviews так как он вызывается после того, как вложенные представления были размещены на экране, он вызывается также после каждого изменения ориентации вашего устройства, например, ширина вашего устройства будет меняться, когда пользователь переходит в альбомный режим. viewWillAppear:

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    screenWidth =  UIScreen.mainScreen().bounds.width
    screenHeight = UIScreen.mainScreen().bounds.height
  }

Затем:-

Если вы инициализируете и объявляете свою кнопку программно:

print(self.screenWidth)

self.imageButton.frame.size = CGSizeMake(self.screenWidth,240)

Если вы используете AutoLayout для ограничений, то:

  • Создать @IBOutlet ограничения ширины вашей кнопки в вашем классе

    @IBOutlet weak var widthConstraint: NSLayoutConstraint!
    
  • Затем установите его соответственно.

     widthConstraint = self.screenWidth
    

Примечание. Для условий, не использующих автоматическое расположение, когда представления встроены в представление, функция CGRectMake будет выполняться только для родительского представления, а не для дочернего представления.

При необходимости выполнить операцию с CGRectMake, Авто макет должен быть отключен

Другие вопросы по тегам