8

これは少しばかげているように見えるので、私はおそらくここで何か間違ったことをしています。
すべてのページで同じであるカスタムtitleView(UILabelの形式)をUINavigationControllerに設定しています。これを容易にするために、ラベルを正しく表示する関数をアプリデリゲートに作成しました。次に、ナビゲーションスタックにプッシュした直後に、サブビューでこの関数を呼び出します。
これがコードです(おそらく私の説明よりも理にかなっています):

//In MyAppDelegate.m:
- (void)showTitleForNavigationController:(UINavigationController*) navController {
    UILabel *label = [[UILabel alloc] init];
    // set up label attributes
    // ...
    [label sizeToFit]; //without this line my label won't show at all
    [navController.navigationBar.topItem setTitleView:label];
    [label release];
}

// In SomeViewController.m, when pushing another controller onto the stack:
    UIViewController *otherViewController = //initialize other view controller;
    [self.navigationController pushViewController:otherViewController animated:YES];
    [(MyAppDelegate*)[[UIApplication sharedApplication] delegate] showTitleForNavigationController:otherViewController.navigationController];

私の問題は、次のView Controllerをスタックにプッシュし、新しいコントローラーがスムーズにスライドすると、アニメーションの全期間中、ラベルが左上に貼り付けられ、アニメーションが終了した後に最終的に所定の位置にスナップすることです。それは本当に奇妙で醜いように見えます。次のビューからスムーズにスライドするようにラベルを適切に設定するにはどうすればよいですか?確かに私が見逃しているのは単純なことです...

4

3 に答える 3

3

この質問に対する非常に遅い回答ですが、同じ問題に遭遇し、画像を使用せずに別の解決方法を見つけました。誰かを助けるかもしれないので、私の解決策を共有したいと思いました。

私の場合、カスタム UILabel を titleview に設定していますが、viewDidLoad メソッドで titleview プロパティを設定した場合にのみ、正しくアニメーション化されることに気付きました。ただし、場合によっては、viewDidLoad でまだタイトルを知らなかったことがあります (たとえば、http リクエストからタイトルを使用する必要があった場合など)。したがって、これらのケースに対する私の解決策は、viewDidLoad でテキスト @" " を使用して titleview プロパティを customlabel に設定することでした。実際のタイトルを取得するたびに、カスタム ラベルの text プロパティのみを変更しました。

- (void)viewDidLoad {
   [super viewDidLoad];
   // Do any additional setup after loading the view from its nib.

   //set temporary title, the MBMUINavigationBarTitleView is a UIView subclass whose  viewWithTitle method returns an autoreleased UIlabel with my custom settings, custom font etc.
   self.navigationItem.titleView = [MBMUINavigationBarTitleView viewWithTitle:@" "];
}

//somewhere later, when I have the real title
UILabel* titleLabel = (UILabel*)self.navigationItem.titleView;
[titleLabel setText:theRealTitle];
于 2011-08-29T16:58:53.590 に答える
0

結局ヘッダーの背景にテキスト入りの画像を使ってしまったので、本来の動きとしてはスムーズに動くどころか、全然動きません。
見出しがどこも同じであることを考えると、それほど大したことではありません。

于 2011-03-21T01:14:30.317 に答える