iOS 7 の新しいメッセージ アプリ (Safari も) に見られるのと同様の効果を達成しようとしています。これにより、ナビゲーション バー自体に進行状況バーが表示されます。
私はいくつかのアプローチを試しましたが、ほとんど機能するものを見つけました。私が使用しているのは、UINavigationBar
初期化時にカスタム プログレス バーをサブビューとして追加するカスタム サブクラスです。これはほとんど問題なく動作しますが、追加しようとするとアプリがクラッシュNSLayoutConstraints
します。
作業コード (レイアウトの制約がないため、向きの変更に適応しません):
- (void)commonInit
{
if (!self.progressIndicator) {
self.progressIndicator = [[ECourseProgressIndicatorView alloc] initWithFrame:CGRectMake(0, self.bounds.size.height - 3, self.bounds.size.width, 3)];
[self addSubview:self.progressIndicator];
}
}
(s を追加して) 使用できると予想されるコードですがNSLayoutConstraint
、クラッシュします:
- (void)commonInit
{
if (!self.progressIndicator) {
self.progressIndicator = [[ECourseProgressIndicatorView alloc] initWithFrame:CGRectMake(0, self.bounds.size.height - 3, self.bounds.size.width, 3)];
[self addSubview:self.progressIndicator];
self.progressIndicator.translatesAutoresizingMaskIntoConstraints = NO;
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-0-[progressIndicator]-0-|" options:0 metrics:nil views:@{@"progressIndicator": self.progressIndicator}]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[progressIndicator(==3)]-0-|" options:0 metrics:nil views:@{@"progressIndicator": self.progressIndicator}]];
}
}
レイアウト制約を使用してコードを実行したときに発生するエラーは、Gist hereに含まれています。を設定しない場合translatesAutoresizingMaskIntoConstraints = NO
、コードは機能しますが、指定したレイアウト制約は無視され、自動サイズ変更マスクの制約が優先されます。
誰でも光を当てることができますか?
PS私は当初、プログレスバーを UINavigationBar の上のビューとして追加することを考えていました (したがって、その階層にはまったくありません) が、ビューをナビゲーションバーの上に視覚的に配置する方法に関する情報が見つかりません (Z 座標用語で) 、Y ではありません)。
注:これを Apple 開発者フォーラムに投稿しましたが、返信がありませんでした。