Проблема с размером шрифта UIButton внутри анимации UIView

У меня странная проблема с UIButtons внутри UIView. Первоначально представление ограничено высотой 0, и я анимирую ограничение, используя

UIView.animateWithDuration(0.6, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations: {

        heightConstraint!.constant = height
        self.view.layoutIfNeeded()

    }) { (finished) in

    }

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

Во время анимации размер шрифта titleLabel кнопок увеличивается с 0 до правильного размера. В этих кнопках нет ничего особенного; для них установлен системный шрифт 18, расположенный относительно супервизора. Рамки кнопок правильные, меняется только размер шрифта.

Я пытался явно установить adjustsFontSizeToFitWidth и contentMode, но это не дало никакого эффекта. Интересно, что если я добавлю в представление простое число UILabel, все будет работать нормально.

Любые предложения относительно того, что происходит?


person Graham    schedule 11.07.2016    source источник


Ответы (2)


Мне удалось избежать этой проблемы, явно установив для высоты ненулевое значение перед анимацией:

constraint.constant = 1
self.view.layoutIfNeeded()
self.view.setNeedsUpdateContraints()

// do animation

Это решает проблему, хотя это похоже на взлом чего-то, что я не делаю правильно в первую очередь.

person Graham    schedule 11.07.2016
comment
Это нормально, если вы просто вызовете self.view.layoutIfNeeded() перед настройкой анимации и ограничений. - person Lachezar Todorov; 22.02.2018

Попробуйте с clipsToBounds = true, текст прячется внутри кнопки

Когда высота равна 0 или 1, myView

введите здесь описание изображения

а после установки clipsToBounds = true вот так

введите здесь описание изображения

Примечание Граница = 1 и высота = 1 здесь просто для представления. Даже я получаю эту странную проблему. Но текст не отображается после установки границ в true

person Amit Singh    schedule 11.07.2016
comment
Боюсь, никакого эффекта! - person Graham; 11.07.2016
comment
Проверьте, помогает ли это - person Amit Singh; 11.07.2016