You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Navigation Item titleView中图片旋转后转场结束复原问题求助

解决NavigationItem TitleView旋转图片转场后恢复的问题

这个问题我之前也碰到过!本质原因是导航栏在转场完成后会重新布局titleView,这会把你之前设置的transform给重置掉。下面给你几个可行的解决办法:

方法一:在视图布局完成后重新设置旋转

你可以在viewDidAppear(_:)或者viewDidLayoutSubviews()方法里重新应用旋转,因为这两个方法会在转场结束、布局完全稳定后被调用:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    if let titleImageView = navigationItem.titleView as? UIImageView {
        titleImageView.transform = CGAffineTransform(rotationAngle: CGFloat.pi)
    }
}

或者用viewDidLayoutSubviews(),记得加个判断避免重复设置:

private var hasAppliedRotation = false

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    guard !hasAppliedRotation, let titleImageView = navigationItem.titleView as? UIImageView else { return }
    titleImageView.transform = CGAffineTransform(rotationAngle: CGFloat.pi)
    hasAppliedRotation = true
}

方法二:自定义UIImageView子类,确保旋转始终生效

创建一个自定义的UIImageView,在layoutSubviews()里强制保持旋转状态,这样不管导航栏怎么布局,都不会重置你的transform:

class RotatedImageView: UIImageView {
    override func layoutSubviews() {
        super.layoutSubviews()
        // 这里设置你需要的旋转角度
        transform = CGAffineTransform(rotationAngle: CGFloat.pi)
    }
}

然后替换原来的UIImageView使用这个子类:

let arrImage = RotatedImageView(image: #imageLiteral(resourceName: "arrow"))
arrImage.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
navigationItem.titleView = arrImage

额外提示:如果需要动画旋转

如果你是想要转场过程中伴随动画旋转,那可以用UIView.animate包裹transform设置,同时结合viewWillAppear(_:):

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    UIView.animate(withDuration: 0.3) {
        if let titleImageView = self.navigationItem.titleView as? UIImageView {
            titleImageView.transform = CGAffineTransform(rotationAngle: CGFloat.pi)
        }
    }
}

这样既保证动画效果,转场后也能保持旋转状态~

内容的提问来源于stack exchange,提问作者Nikhil Muskur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:55:42