23

在我的应用程序中,我有一些自定义标题(带有不是字体的字体)存储在我想作为导航标题的 png 中。我希望标题中的字母对于每个不同的视图控制器都具有相同的大小,因此在 illustrator 中,我一直致力于使其大小和宽度都相同(提供空白空间以考虑较短的字符串)。我执行以下操作:

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

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

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

4

5 回答 5

46

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

于 2013-04-17T20:48:43.050 回答
32

您可以控制 UINavigationbar 标题视图的大小和位置。不要直接将 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;

希望它可以帮助你。

于 2013-04-17T20:55:52.790 回答
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
于 2015-10-16T09:57:00.607 回答
1

更新了 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
于 2020-01-04T11:38:54.463 回答
0

快速更新 5

var titleView = UIView()
navigationItem.titleView?.translatesAutoresizingMaskIntoConstraints = false   
navigationItem.titleView = titleView
于 2021-10-28T15:38:42.537 回答