Не могу изменить размер 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
, Авто макет должен быть отключен