Быстрое преобразование UIBarButtonItem не работает в scrollViewDidScroll

#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. Возможно, вам следует ответить на свой собственный вопрос и пометить его как правильный, чтобы другие могли его увидеть.