控制UINavigationItem titleView的大小/位置

Ser*_*nce 21 iphone cocoa-touch uinavigationbar uinavigationcontroller ios

在我的应用程序中,我有一些自定义标题(字体不是字体)存储在png中,我想将其作为导航的标题.我希望标题中的字母对于每个不同的视图控制器都具有相同的大小,因此在插图画家中我努力使它具有相同的大小和宽度(提供空白以考虑更短的字符串).我做以下事情:

UIImageView *titleImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"SelectAnAlbumTitleLettering"]];
titleImageView.contentMode = UIViewContentModeCenter;
self.navigationItem.titleView = titleImageView;
[titleImageView release];
Run Code Online (Sandbox Code Playgroud)

并且看起来图像被任意调整大小并基于每个元素包括的元素navigationBar(即后退按钮,右按钮等)定位.

我想知道,我怎样才能获得控制权,titleView所以我可以让它实现我想要的大小和位置,因此不会随意调整大小/重新定位.

Jef*_*ley 43

不要将图像视图用作标题视图,而是创建包含图像视图的另一个视图.将该视图设置为导航项的标题视图; 现在您可以在标题视图中自由调整图像视图的帧.

  • 您仍然需要确保容器视图具有适当的大小以包含图像视图 (12认同)

Nis*_*agi 31

您可以控制UINavigationbar titleview的大小和位置.不要直接将imageview设置为titleview.而是创建一个自定义UIView,然后根据您的要求设置其框架,并添加titleImageView作为其子视图.

UIView *backView =[[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 40)];// Here you can set View width and height as per your requirement for displaying titleImageView position in navigationbar 
[backView setBackgroundColor:[UIColor greenColor]];
UIImageView *titleImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"SelectAnAlbumTitleLettering"]];
titleImageView.frame = CGRectMake(45, 5,titleImageView.frame.size.width , titleImageView.frame.size.height); // Here I am passing origin as (45,5) but can pass them as your requirement. 
[backView addSubview:titleImageView];
//titleImageView.contentMode = UIViewContentModeCenter;
self.navigationItem.titleView = backView;
Run Code Online (Sandbox Code Playgroud)

希望它能帮到你.

  • 有没有解释为什么你不能直接设置imageView?导航titleView是否用它做了一些时髦的东西? (3认同)

小智 12

在Swift中,你可以这样做:

    var titleView = UIView(frame: CGRectMake(0, 0, 100, 40))
    var titleImageView = UIImageView(image: UIImage(named: "cocolife"))
    titleImageView.frame = CGRectMake(0, 0, titleView.frame.width, titleView.frame.height)
    titleView.addSubview(titleImageView)
    navigationItem.titleView = titleView
Run Code Online (Sandbox Code Playgroud)