首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >UITabBar顶部视图

UITabBar顶部视图
EN

Stack Overflow用户
提问于 2017-02-22 06:46:03
回答 7查看 15.9K关注 0票数 15

与Spotify或Apple应用程序在播放歌曲时所做的类似,它在UITabBar之上放置了一个自定义视图:

我尝试过的解决方案:

  1. UITabBarController在具有最大大小容器视图的ViewController中,以及在底部布局指南之上的容器View49pt顶部的自定义视图:

问题:嵌入到UITabBarController底部的ViewControllers中的任何内容都不会显示,因为它们隐藏在自定义布局后面。我尝试过在size forChildContentContainer中重写UITabBarController,尝试更新底层布局指南,什么都没有。我需要调整UITabBarController.的容器视图框架的大小。

  1. 再次尝试#1,但尝试解决增加UITabBar的大小隐藏在其后面的内容问题,然后使用每个ImageInset上的TabBarItem将其降下来,并将我的自定义视图添加到UITabBar之上。效果不太好。有些时候我想隐藏我的自定义视图。
  2. UITabBarController作为根,每个子类都是具有容器视图+我的自定义视图的ViewController:

但是现在我有了多个自定义视图的实例。如果我想更改标签,必须将其更改为所有视图。或隐藏等

  1. 重写UITabBarController的UITabBarController属性,并返回具有UITabBar + my自定义视图的自定义UITabBar (用xib充气)。问题:可能是所有尝试中最令人沮丧的尝试。如果使用class MyCustomTabBar : UITabBar {}实例覆盖该属性,则不会出现选项卡!是的,我将myCustomTabBar的代表设置为self

倾向于#3,但寻找一个更好的解决方案。

EN

Stack Overflow用户

发布于 2020-05-15 07:30:28

除非我误解了,否则您可以从UITabBarController类创建一个自定义视图。然后,您可以将它插入之上,并将其约束到tabBar对象,这是与控制器的tabBar关联。

因此,在您的UITabBarController类中,创建自定义视图

代码语言:javascript
运行
复制
class CustomTabBarController: UITabBarController {
    var customView: UIView = {
            let bar = UIView()
            bar.backgroundColor = .white
            bar.translatesAutoresizingMaskIntoConstraints = false
            return bar
        }()

在viewDidLoad()中,将您的自定义视图添加到UITabBarController的视图对象中,并将其放在之上的tabBar对象之上

代码语言:javascript
运行
复制
override func viewDidLoad() {
        super.viewDidLoad()

        ...

        self.view.insertSubview(customView, aboveSubview: tabBar)

然后,在将自定义视图添加为subView之后,添加约束,以便正确定位。这也应该在viewDidLoad()中完成,但必须在插入视图之后才能完成。

代码语言:javascript
运行
复制
self.view.addConstraints([
            NSLayoutConstraint(item: customView, attribute: .leading, relatedBy: .equal, toItem: tabBar, attribute: .leading, multiplier: 1, constant: 0),
            NSLayoutConstraint(item: customView, attribute: .trailing, relatedBy: .equal, toItem: tabBar, attribute: .trailing, multiplier: 1, constant: 0),
            NSLayoutConstraint(item: customView, attribute: .top, relatedBy: .equal, toItem: tabBar, attribute: .top, multiplier: 1, constant: -50),
            NSLayoutConstraint(item: customView, attribute: .bottom, relatedBy: .equal, toItem: tabBar, attribute: .top, multiplier: 1, constant: 0)
            ])

有许多创造性的方法可以设置约束来执行您想做的事情,但是上面的约束应该附加一个高度为50的tabBar之上的视图。

票数 1
EN
查看全部 7 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42384470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档