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()
中,这样您就不会得到多个渐变层。
我使用自定义 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()
中,这样您就不会得到多个渐变层。