13

在我的應用程序中,我有一些自定義標題(帶有不是字體的字體)存儲在我想作爲導航標題放置的png中。我希望標題中的字體對於每個不同的視圖控制器都是相同的大小,因此在Illustrator中,我一直致力於使它的大小和寬度都相同(提供空白空間來解釋較短的字符串)。我執行以下操作:控制UINavigationItem的大小/位置titleView

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

而且似乎圖像被調整大小任意和位於基於元素包括在每個navigationBar(即後退按鈕,右按鈕等)。

我想知道,我如何獲得titleView的控制權,這樣我就可以實現我想要的大小和位置,因此它不會被任意調整大小/重新定位。

回答

39

不是使用圖像視圖作爲標題視圖,而是創建另一個包含圖像視圖的視圖。設置作爲導航項目的標題視圖;現在您可以在標題視圖中自由調整圖像視圖的框架。

+9

您仍然需要確保容器視圖具有合適的尺寸,以容納圖像視圖 – Zorayr

29

您可以控制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; 

希望它可以幫助你。

+3

有沒有解釋「爲什麼」你不能直接設置imageView?導航titleView是否對它做了一些時髦的事情? – rckehoe

+0

@rckehoe系統正在改變titleView的框架,但不會改變titleViews子視圖的框架。請記住,我們沒有實現UINavigationItem。所以可能會有調整大小和位置的檢查。 – kezi

6

在斯威夫特,你可以做這樣的:

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