#swift #uinavigationbar #transform
#swift #панель навигации #преобразование
Вопрос:
У меня есть пользовательский элемент навигации
lazy var closeBtn: UIBarButtonItem = {
let closeBtn = UIButton(frame: CGRect(x: 0, y: 0, width: 24, height: 24))
closeBtn.setBackgroundImage(UIImage.init(named: "icClose")!.withRenderingMode(.alwaysOriginal), for: .normal)
closeBtn.addTarget(self, action: #selector(handleClose), for: .touchUpInside)
let leftBtn = UIBarButtonItem(customView: closeBtn)
leftBtn.imageInsets = UIEdgeInsets(top: -1, left: 10, bottom: 0, right: 0)
return leftBtn
}()
Итак, при прокрутке я хочу изменить масштаб этого элемента
func scrollViewDidScroll(_ scrollView: UIScrollView) {
self.navigationItem.leftBarButtonItem?.customView?.transform = CGAffineTransform(scaleX: value, y: value)
}
Это просто ничего не делает. Забавно, что тот же код работает внутри UIView.Анимировать
func scrollViewDidScroll(_ scrollView: UIScrollView) {
UIView.animate(withDuration: 0.2) {
self.navigationItem.leftBarButtonItem?.customView?.transform = CGAffineTransform(scaleX: value, y: value)
}
}
Но я хочу немедленно преобразовать его на основе значения смещения.
Комментарии:
1. Я думаю, вам следует добавить
self.view.layoutIfNeeded
после применения преобразования, чтобы представление перерисовывалось само.2. К сожалению, это не помогает
3. Решается путем добавления translatesAutoresizingMaskIntoConstraints = false в CustomView
4. Возможно, вам следует ответить на свой собственный вопрос и пометить его как правильный, чтобы другие могли его увидеть.