swift - 旋转时 UINavigationController class 中的框架问题

swift - frame issue in UINavigationController class when rotating

我使用自定义 UINavigationController class 在导航栏上设置颜色渐变。自定义的navclass决定了navbar的frame size,然后把gradient放在里面。问题是,当我从纵向旋转到横向时,渐变仅填充横向栏的纵向部分。我只将自定义 UINavigationController class 分配给情节提要中的导航视图。

所以我猜我需要在旋转完成后以某种方式在自定义导航class中调用帧大小的刷新,但我不确定如何或在哪里?

这是相关的代码片段,来自自定义导航的覆盖函数 viewDidLoad()class。

let gradientlayer = CAGradientLayer()
gradientLayer.frame = self.navigationBar.bounds
self.navigationBar.layer.inserSublayer(gradientLayer, atIndex: 1)

我尝试将其放入 viewWillAppear() 中,但没有成功。有帮助吗?

viewDidLoad()viewWillAppear() 不会在旋转时被调用,因此您的代码不会在那里更新框架。

您应该将 gradientLayer.frame = self.navigationBar.bounds 添加到 viewWillLayoutSubviews(),但将其他代码保留在 viewDidLoad() 中,这样您就不会得到多个渐变层。