问题 获取uinavigationItem.titleView的最大宽度?


我有一个自定义titleView,我需要设置最大宽度。这将是屏幕宽度 - 左项目的宽度(后标题,按钮或零) - 右项目的宽度(按钮或零)。我怎么能确定这个?

谢谢。


5901
2018-05-23 21:30


起源



答案:


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


4
2018-05-23 21:33



它不会自动设置宽度。我可以调用sizeToFit,在设置后调用sizeThatFits,但我不知道从sizeThatFits返回什么。我从哪里获得最大宽度? - Stephanie
我自己没有测试过,但是由于标题视图实际上是为了适应和左右导航项之间的中心,我希望sizeThatFits消息实际上是由导航栏本身发送到titleView 。不是这样的吗? - Gwendal Roué
我不这么认为,但我不确定。但无论哪种方式,我从sizeThatFits返回什么? - Stephanie
发送到此方法的参数应该是您要查找的值。 - Gwendal Roué
传递给sizeThatFits:的值的宽度不考虑左右栏。 - tyler


答案:


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


4
2018-05-23 21:33



它不会自动设置宽度。我可以调用sizeToFit,在设置后调用sizeThatFits,但我不知道从sizeThatFits返回什么。我从哪里获得最大宽度? - Stephanie
我自己没有测试过,但是由于标题视图实际上是为了适应和左右导航项之间的中心,我希望sizeThatFits消息实际上是由导航栏本身发送到titleView 。不是这样的吗? - Gwendal Roué
我不这么认为,但我不确定。但无论哪种方式,我从sizeThatFits返回什么? - Stephanie
发送到此方法的参数应该是您要查找的值。 - Gwendal Roué
传递给sizeThatFits:的值的宽度不考虑左右栏。 - tyler


_segmentedControl.frame = CGRectMake(0, 0, CGFLOAT_MAX, _segmentedControl.frame.size.height);

[self.navigationItem setTitleView:_segmentedControl];

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


6
2018-03-24 15:28



这应该标记为正确的答案。 - Peymankh
在iOS <11上这对我有用(在iOS 11中我的视图自动调整大小) - Matt Mc


将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
}

0
2018-02-02 10:54