目标:要使表格视图滚动,以便在状态栏下显示半透明而不显示导航栏。
现在,我将tableView设置为顶部锚点(因此技术上位于状态栏下方)。在向上滚动表视图时,这会将状态栏设置为纯色。我已经将navigationAppearance的barTintColor和半透明设置为YES而没有运气。
有什么想法吗?视图在故事板中实例化
答案 0 :(得分:8)
如果没有任何code
,您的问题很难猜到。我相信当您在Apple Music应用中提到的tableview内容滚动时,您会尝试实现半透明状态栏。
在viewdidLoad
方法中尝试以下代码。
第1步:隐藏navigation bar
。如果您的controller
嵌入navigationController
。
navigationController?.navigationBar.isHidden = true
第2步:将状态栏大小UIView
放置到您的控制器,以充当调整alpha
值的半透明状态栏。
let statusBarView = UIView(frame: CGRect(x:0, y:0, width:view.frame.size.width, height: UIApplication.shared.statusBarFrame.height))
statusBarView.backgroundColor=UIColor.white
statusBarView.alpha = 0.8 // set any value between 0 to 1
view.addSubview(statusBarView)
上面的代码会产生以下输出。让我知道代码适合你。
有关如何设置tableView frame
和contentView
的更多信息,请参阅以下link中的答案。
<强>更新强>
改进答案:
您可以使用UIBlurEffectView
来获得更好的半透明效果。
let statusBarView = UIView(frame: CGRect(x:0, y:0, width:view.frame.size.width, height: UIApplication.shared.statusBarFrame.height))
let blurEffect = UIBlurEffect(style: .extraLight) // Set any style you want(.light or .dark) to achieve different effect.
let blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.frame = statusBarView.bounds
blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
statusBarView.addSubview(blurEffectView)
view.addSubview(statusBarView)
<强>输出:强>
答案 1 :(得分:0)
如您所述,您的UITableView
正好位于状态栏下方。向下滚动时,tableView
的框架保持相同的大小和原点,不会位于状态栏下方。你想要做的是将tableView
的约束设置到超级视图的顶部(而不是顶部布局指南),这意味着它将位于状态栏的正下方。
因为状态栏现在隐藏了您希望进行内容偏移的tableView
的前20px:
tableView.contentInset = UIEdgeInsetsMake(top: 20, left: 0, bottom: 0, right: 0)
要使滚动指示器从状态栏下方开始,您还需要为其设置偏移:
tableView.scrollIndicatorInsets = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 0)