隐藏iOS标准控件的子视图的风险

时间:2013-04-11 13:05:02

标签: ios objective-c app-store

我想在某些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?

2 个答案:

答案 0 :(得分:3)

在我原来的答案中,我认为您在隐藏/显示子视图时会征求有关最佳做法的信息。

回想起来,我收集到您正在尝试更改现有iOS控件中内置的子视图。这让我觉得有点脆弱,高度依赖于控件的内部结构,Apple可以自由地从一个iOS版本转换到另一个版本。就个人而言,我不会仅仅因为这个原因而倾向于采用这种技术。

关于Apple应用程序审批流程,由于这个原因,我不知道他们拒绝了应用程序,但如果他们这样做,我们不会感到惊讶。你的概念并没有与app review guidelines第10节中的任何特定点相冲突,但它也不完全符合第10节的精神。应用审核指南令人沮丧,含糊不清,可能会发生变化。你可能没事,但没有保证。


隐藏/显示子视图时有关最佳做法的一些观察结果:

  1. 在Apple的应用审核流程中,此类内容不太可能导致拒绝。 [如果您正在更改控件的内部子视图,那么您可能没问题,但我猜它会取决于您在此过程中的积极程度。]

  2. 如果您发现自己总是隐藏/显示一堆子视图,有时更容易将它们放在容器视图中,然后隐藏/显示容器。

  3. 我不鼓励你做objectAtIndex:12这样的事情来选择特定的子视图。为子视图设置tag属性更安全,然后在想要选择一个时使用viewWithTag(例如,隐藏/显示)。

答案 1 :(得分:1)

我会说,你没有使用任何私人api,或任何与此相关的东西。我在App Store中得到了一些拒绝,但没有那样。我会说这是安全的,你只是隐藏了子视图。