【问题标题】:Get max width of uinavigationItem.titleView?获取 uinavigationItem.titleView 的最大宽度?
【发布时间】:2012-05-30 11:39:23
【问题描述】:

我有一个自定义的 titleView,我需要为其设置最大宽度。这将是屏幕宽度 - 左侧项目的宽度(后标题、按钮或 nil) - 右侧项目的宽度(按钮或 nil)。我该如何确定?

谢谢。

【问题讨论】:

    标签: ios uinavigationbar frame uinavigationitem titlebar


    【解决方案1】:

    导航栏不会自动将宽度设置为最大吗?我的意思是,我确定你的自定义 titleView 的 sizeThatFits: 方法被调用了。也许这是一个很好的起点。

    【讨论】:

    • 它不会自动设置宽度。我可以调用 sizeToFit,它在设置后调用 sizeThatFits,但我不知道从 sizeThatFits 返回什么。我从哪里获得最大宽度?
    • 我自己没有测试过,但是由于标题视图实际上已经调整大小以适应左右导航项并居中,所以我希望 sizeThatFits 消息会实际发送通过导航栏本身到titleView。不是这样吗?
    • 我不这么认为,但我不确定。但无论哪种方式,我从 sizeThatFits 返回什么?
    • 发送给这个方法的参数应该是你要找的值。
    • 为什么这个答案在不能解决问题时被标记为正确的答案
    【解决方案2】:
    _segmentedControl.frame = CGRectMake(0, 0, CGFLOAT_MAX, _segmentedControl.frame.size.height);
    
    [self.navigationItem setTitleView:_segmentedControl];
    

    将 CGFLOAT_MAX 设置为 navigationItem 标题视图的宽度会使用左侧项目和右侧项目之间的最大可用空间。

    【讨论】:

    • 这在 iOS
    【解决方案3】:

    将 titleView 宽度设置为大于最大屏幕宽度所需的宽度,并且导航栏调整宽度以适应屏幕。如果有左或右 UIBarButtonItem,则 titleView 相对于它们调整大小。试试旋转屏幕,自己看看。

    func setTitleView(){
        guard let navFrame = navigationController?.navigationBar.frame else{
            return
        }
        let myView = UIView(frame: CGRect(x: 0, y: 0, width: navFrame.width*3, height: navFrame.height))
        myView.backgroundColor = UIColor.orange
        self.navigationItem.titleView = myView
    }
    

    【讨论】:

    • 为什么 * 乘以 3?谁能解释一下?
    猜你喜欢
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 2013-05-14
    • 2012-11-13
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多