uinavigationcontrollerのカスタムタイトルビューは、誤ってアニメーション化されています

StackOverflow https://stackoverflow.com/questions/3697260

質問

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

//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];

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

役に立ちましたか?

解決 2

私がやったことは、ヘッダーのバックラウンドとしてテキストを含む画像を使用することでした。そのため、元々望んでいたようにスムーズにアニメーション化するのではなく、まったくアニメーション化していません。
どこでも同じ見出しであることを考えると、それほど大したことではありません。

他のヒント

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

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

- (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];

私はYLVAと同様の状況にあり、カスタムテキストクラスのインスタンスを使用して UINavigationItem's titleView 財産。ただし、で構成することがわかりました viewDidLoad アニメーションのグリッチを解決しませんでした。

問題に対する私の回避策は、問題のビューコントローラーがナビゲーションコントローラーのスタックから飛び出し、その時点で削除するまで待つことでした UINavigationItem's 習慣 titleView そのため、アニメーション化する必要はありません。

私のとき UINavigationController サブクラスはを受け取ります popViewControllerAnimated: メッセージ、カスタムテキストフィールドからタイトルテキストをコピーします(UINavigationItem's titleView)に UINavigationItem's title プロパティと設定 titleView nilへの財産。そうして UINavigationController 先に進み、ビューコントローラーから飛び出し、標準のナビゲーションバータイトルラベルのみがアニメーション化されています(私のカスタムタイトルではありません)、グリッチフリーです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top