1

UINavigationItem プロンプト テキストを 2 行で表示するための解決策を誰か教えてもらえますか?

4

1 に答える 1

2

これを行う組み込みの方法はありません。以下は、stackOverflow post UINavigationItem からプロンプトとアクティビティインジケーターを組み合わせた、かなりうまく機能しているように見える回避 策です。

これが作成するシミュレータのスクリーン ショットです。 2 行の UINavigationItem プロンプトの iPhone スクリーン ショット

テキストは であるUILabelため、色、フォント、またはその他のものも変更できることに注意してください。

// I have this code in viewDidLoad
UIView                      *viewContainingPrompt;
UIBarButtonItem             *promptButtonItem;

// Configuring the prompt title of the navigation bar so it is present but empty
[self.navigationItem setPrompt: @""];

// We will create a UIBarButtonItem that has a custom view (viewContainingPrompt).
// A subview of viewContainingPrompt will be a UILabel (headerLabel)
// We need to have this "intermediate" view to position the label at the right position 
// (the UIBarButtonItem ignores the origin and height of its custom view)
viewContainingPrompt = [[UIView alloc] initWithFrame: CGRectMake(0, 0, 0, 85)];
viewContainingPrompt.autoresizingMask = UIViewAutoresizingFlexibleWidth;

// Choose a width that puts 10 points on either end...
CGFloat labelWidth = self.navigationController.navigationBar.bounds.size.width - 20.0;
// Note that the '-60' below is determined by the width of the back button
// If someone can figure out how to determine this width at runtime this code
// would be much more robust.
UILabel *headerLabel = [[UILabel alloc] initWithFrame: CGRectMake(-60,-8,labelWidth,36)];
headerLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth;
headerLabel.text = @"A quite long prompt string that will wrap to a second line to demonstrate multiline prompt.";
headerLabel.font = [UIFont systemFontOfSize: 14];
headerLabel.numberOfLines = 0; // Zero gives as many lines as will fit, could be 2
headerLabel.backgroundColor = [UIColor clearColor];
headerLabel.textColor = [UIColor colorWithRed: .1 green: .1 blue: .2 alpha: 0.8f];
headerLabel.shadowColor = [UIColor colorWithRed: 1 green: 1 blue: 1 alpha: 0.5f];
headerLabel.shadowOffset = CGSizeMake( 0, 1 );
headerLabel.textAlignment = UITextAlignmentCenter;
[viewContainingPrompt addSubview: headerLabel];
//[headerLabel release]; // Uncomment if not using ARC

promptButtonItem = [[UIBarButtonItem alloc] initWithCustomView: viewContainingPrompt];
self.navigationItem.leftBarButtonItem = promptButtonItem;
self.navigationItem.leftItemsSupplementBackButton = YES;
//[viewContainingPrompt release]; // Uncomment if not using ARC
//[promptButtonItem release]; // Uncomment if not using ARC

幅をハードコードする必要がないように、実行中に戻るボタンの幅を把握する方法についてのフィードバックをいただければ幸いです。

このままでは、プライベート API やその他の違法なコードが含まれているとは思いません。

于 2012-08-22T12:51:33.757 に答える