控制UINavigationItem titleView的大小/位置

时间:2013-04-17 20:33:05

标签: iphone ios cocoa-touch uinavigationcontroller uinavigationbar

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

UIImageView *titleImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"SelectAnAlbumTitleLettering"]];
titleImageView.contentMode = UIViewContentModeCenter;
self.navigationItem.titleView = titleImageView;
[titleImageView release];

似乎图像是根据每个navigationBar上包含的元素(即后退按钮,右按钮等)任意调整大小和定位的。

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

4 个答案:

答案 0 :(得分:42)

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

答案 1 :(得分: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;

希望它对你有所帮助。

答案 2 :(得分: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

答案 3 :(得分:0)

更新的Swift4代码:

    var titleView = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 40))
    var titleImageView = UIImageView(image: UIImage(named: "headerlogo"))
    titleImageView.frame = CGRect(x: 0, y: 0, width: titleView.frame.width, height: titleView.frame.height)
    titleView.addSubview(titleImageView)
    navigationItem.titleView = titleView