Dar*_*ski 17 uinavigationbar uitableview ios
我正在尝试实现UINavigationBar在滚动时更改其透明度UITableView.开始时,导航栏应该具有透明背景,因此其下方的内容应该是可见的(将显示图像,例如我使用纯色):

当用户滚动表格视图时,透明度应替换为纯色:

表视图将包含节标题,这些标题应该像使用非半透明导航栏时一样.一旦从底部"触摸"它,标题视图应"粘贴"到导航栏:

我试图在iOS应用程序中实现此流程没有运气.
对于初始状态,我将UINavigationBar translucent属性设置为YES,以及两者backgroundColor并barTintColor清除颜色,这给了我想要的东西.
然后,当用户滚动表视图时,我正在更新backgroundColor和barTintColor使用给定alpha分量的颜色,基于当前滚动偏移计算.我使用scrollViewDidScroll:的UIScrollViewDelegate协议来这样做.但是,它仅更改导航栏的背景,使状态栏背景保持透明,这不是我想要的.
UINavigationBar没有设置translucent属性我找不到透明的另一种方法YES.不幸的是,这会改变滚动时节标题的行为方式.由于导航栏是半透明的,当它们应该像上面的第三个屏幕截图那样"粘住"到条形时,部分标题视图隐藏在它下方.
我将不胜感激任何帮助和提示如何实现在Objective-C或Swift中描述或类似的导航栏.
假设您有对 tableView 上方视图的引用,并且您不想与其中的任何内容进行交互:
var overlayView:UIView!
var offsetDenominator:CGFloat!
let TARGER_COLOR = UIColor.blackColor()
override func viewDidLoad() {
super.viewDidLoad()
if let navCtrl = self.navigationController {
self.offsetDenominator = headerView.frame.size.height - navCtrl.navigationBar.frame.height
let targetCIColor = CIColor(CGColor: self.TARGER_COLOR.CGColor)
let overlayColor = UIColor(red: targetCIColor.red, green: targetCIColor.green, blue: targetCIColor.blue, alpha: 0.0)
self.overlayView = UIView(frame: self.headerView.frame)
self.overlayView.backgroundColor = overlayColor
self.view.addSubview(self.overlayView)
}
...
override func scrollViewDidScroll(scrollView: UIScrollView) {
if let navCtrl = self.navigationController, let breakpoint = offsetDenominator {
let alpha = scrollView.contentOffset.y / breakpoint
if alpha >= 1.0 {
navCtrl.navigationBar.backgroundColor = self.TARGER_COLOR
} else {
let targetCIColor = CIColor(CGColor: self.TARGER_COLOR.CGColor)
let overlayColor = UIColor(red: targetCIColor.red, green: targetCIColor.green, blue: targetCIColor.blue, alpha: alpha)
self.overlayView.backgroundColor = overlayColor
navCtrl.navigationBar.backgroundColor = UIColor.clearColor()
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8121 次 |
| 最近记录: |