2

iOS 7 の新しいメッセージ アプリ (Safari も) に見られるのと同様の効果を達成しようとしています。これにより、ナビゲーション バー自体に進行状況バーが表示されます。

iOS 7 のナビゲーション バー内に表示される進行状況バー

私はいくつかのアプローチを試しましたが、ほとんど機能するものを見つけました。私が使用しているのは、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 開発者フォーラムに投稿しましたが、返信がありませんでした。

4

3 に答える 3

5

コツは、navigationItem の titleView にビューを追加することです。そのビューの cliptobounds を NO に設定し、その中に進行状況ビューを追加します。

UIView *test = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 128, 33)];
[test setBackgroundColor:[UIColor redColor]];
[test setClipsToBounds:NO];


// Add the progress view
UIProgressView *progressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleBar];
[progressView setFrame:CGRectMake(-96, 36, 320, 2)];
[progressView setProgress:1.0];
[progressView setProgressTintColor:SYSTEM_BLUE];


[test addSubview:progressView];

self.navigationItem.titleView=test;
于 2014-04-08T16:15:04.767 に答える
1

このビューを NavigarionBar ではなく、NavigationController に入れるだけです。

于 2013-09-22T15:59:59.690 に答える
0

ナビゲーションバーにTitleviewを設定できます...任意のUIViewをナビゲーションバーのtitleviewとして設定するだけです..次に、そのUIViewに任意のサブビューを設定できます..

UIView *viewBar=[[UIView alloc]initWithFrame:CGRectMake(0, 0, 800, 44)];
UILabel *label=[[UILabel alloc]initWithFrame:CGRectMake(50, 0, 50, 50)];
[label setText:@"Sending"];
[viewBar addSubview:label];
self.navigationItem.titleView=viewBar;

ハッピーコーディング....

于 2013-08-30T10:54:24.963 に答える