2

一部の iOS 標準コントロール内に特定のサブビューを非表示にしたいと考えています。だとしましょうMPMoviePlayerViewController

MPMoviePlayerViewController *standartPlayer = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:@"..."]];

...

for (UIView *subView in standartPlayer.view.subviews) {
    if (subView.backgroundColor == [UIColor redColor])
        [subView setHidden:YES];
}

繰り返しますが、背景色が赤いビューを見つけて非表示にすることができMPMoviePlayerViewControllerました。

ビューを見つけるために秘密鍵や秘密クラス名を使用しませんでした。また、Apple が次のような新しいバージョンで何かを変更しても、このコードはクラッシュを引き起こしません。

[[standartPlayer.view.subviews objectAtIndex:12] setHidden:YES];

私の質問は、これは AppStore の Apple Review に合格するのに十分安全ですか?

4

2 に答える 2

3

以下の私の最初の回答では、サブビューを非表示/表示するときのベストプラクティスに関する情報を求めていると思いました。

振り返ってみると、既存の iOS コントロールに組み込まれているサブビューを変更しようとしていることがわかりました。これは、Apple がある iOS バージョンから別のバージョンに自由に変更できるコントロールの内部構造に非常に左右され、少し壊れやすいように私には思えます。個人的には、この理由だけでこの手法を追求する気はありません。

Apple アプリの承認プロセスに関して、私は彼らがこの理由でアプリを拒否したことを認識していませんが、そうしても驚かないでしょう. あなたのコンセプトは、アプリ レビュー ガイドラインのセクション 10 の特定の点に違反していませんが、セクション 10の精神とも完全に一致しているわけでもありません。アプリのレビュー ガイドラインはイライラするほどあいまいで、変更される可能性があります。おそらく大丈夫ですが、保証はありません。


サブビューを非表示/表示する際のベスト プラクティスに関するいくつかの観察事項:

  1. このようなことで、Apple のアプリ レビュー プロセスで拒否されることはほとんどありません。[コントロールの内部サブビューを変更している場合は、おそらく問題ありませんが、そのプロセスでどれだけ積極的に取り組んでいるかに依存すると思います。]

  2. たくさんのサブビューを常に表示/非表示にしている場合は、それらをコンテナー ビュー内に配置してから、コンテナーを非表示/表示する方が簡単な場合があります。

  3. objectAtIndex:12特定のサブビューを選択するようなことをしないことをお勧めします。tagサブビューのプロパティを設定してから、サブビューviewWithTagを選択する場合 (たとえば、非表示/表示) に使用する方がはるかに安全です。

于 2013-04-11T13:15:06.447 に答える
1

プライベート API やそれに関連するものを使用していないということです。App Store でいくつか拒否されましたが、そのようなことはありませんでした。安全だと思います。サブビューを隠しているだけです。

于 2013-04-11T13:07:42.810 に答える