【问题标题】:How to set the height of UINavigationBar according to the length of the text in TitleView?如何根据TitleView中文字的长度设置UINavigationBar的高度?
【发布时间】:2012-04-16 18:37:02
【问题描述】:

我已将 UINavigationBar titleView 设置如下:

UIView *labelView=[[UIView alloc] initWithFrame:CGRectMake(0, 0, 255, 40)];
       UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 200, 40)];
       [label setTextColor:[UIColor whiteColor]];
        label.lineBreakMode=UILineBreakModeWordWrap;
        label.numberOfLines=0;
        label.shadowColor = [UIColor colorWithRed:0.0f/255.0f green:0.0f/255.0f blue:0.0f/255.0f alpha:0.25f];
        label.shadowOffset = CGSizeMake(0.0f, -1.0f);
        label.textAlignment = UITextAlignmentCenter;
        label.adjustsFontSizeToFitWidth=YES;


      [label setBackgroundColor:[UIColor clearColor]];

      switch (genreId) {
       case 1:
        label.text=@"Music";
        self.navigationItem.titleView =label;
        break;
       case 3:
        label.text=@"Family";
        break;
       case 6:
        label.text=@"Literature";
        break;
       case 7:
        label.text=@"Theatre";
        break;
       default:
        label.frame=CGRectMake(0, 0, 255, 40);
        label.text=ArtistName;
        break;
      }


      [label setFont:[UIFont boldSystemFontOfSize:20.0]];
      [labelView  addSubview:label];
      [self.navigationItem setTitleView:labelView];

      [label release];

现在我想更新 UINavigationBar 的高度,因为在我们增加 UINavigationBar 的高度之前,标题视图中的自动换行不会显示。我该怎么做?

【问题讨论】:

  • NavigationBar 的高度默认不能增加。为此子类化它。 stackoverflow.com/questions/892905/…
  • 更好地制作图像,并将该图像添加到 UINavigationBar。
  • 默认导航栏高度 44 px h

标签: iphone objective-c ios


【解决方案1】:

使用这个代码......然后冷静......

NSString *summary;
summary = @" your title";

 // define font size what ever you want....
CGSize s = [summary sizeWithFont:[UIFont systemFontOfSize:30] 
               constrainedToSize:CGSizeMake(self.view.bounds.size.width - 40, MAXFLOAT)     // - 40 For cell padding
                   lineBreakMode:UILineBreakModeWordWrap];



CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, s.height);
[self.navigationController.navigationBar setFrame:frame];

希望对你有所帮助...

【讨论】:

  • 感谢您的解决方案。它工作得很好,但是增加导航栏的高度会隐藏它下面的视图,比如表格视图或搜索栏等。
【解决方案2】:

我认为您必须使用自定义图像创建一个自定义 UINavigationBar,然后您才能做任何您想做的事情。

【讨论】:

    【解决方案3】:

    试试这个,

    @implementation UINavigationBar (CustomHeight)
    
    - (void)layoutSubviews {
      [super layoutSubviews];
      CGRect barFrame = self.frame;
      barFrame.size.height = height;
      self.frame = barFrame;
    }
    
    @end
    

    【讨论】:

    • 你不应该使用类别来覆盖你不拥有的方法
    • 如果你覆盖这些方法(你不拥有的方法),你会被 App Store 禁止吗?提前致谢。
    猜你喜欢
    • 2013-04-27
    • 2011-01-09
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 2011-08-06
    相关资源
    最近更新 更多