我想在某些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?
答案 0 :(得分:3)
在我原来的答案中,我认为您在隐藏/显示子视图时会征求有关最佳做法的信息。
回想起来,我收集到您正在尝试更改现有iOS控件中内置的子视图。这让我觉得有点脆弱,高度依赖于控件的内部结构,Apple可以自由地从一个iOS版本转换到另一个版本。就个人而言,我不会仅仅因为这个原因而倾向于采用这种技术。
关于Apple应用程序审批流程,由于这个原因,我不知道他们拒绝了应用程序,但如果他们这样做,我们不会感到惊讶。你的概念并没有与app review guidelines第10节中的任何特定点相冲突,但它也不完全符合第10节的精神。应用审核指南令人沮丧,含糊不清,可能会发生变化。你可能没事,但没有保证。
隐藏/显示子视图时有关最佳做法的一些观察结果:
在Apple的应用审核流程中,此类内容不太可能导致拒绝。 [如果您正在更改控件的内部子视图,那么您可能没问题,但我猜它会取决于您在此过程中的积极程度。]
如果您发现自己总是隐藏/显示一堆子视图,有时更容易将它们放在容器视图中,然后隐藏/显示容器。
我不鼓励你做objectAtIndex:12
这样的事情来选择特定的子视图。为子视图设置tag
属性更安全,然后在想要选择一个时使用viewWithTag
(例如,隐藏/显示)。
答案 1 :(得分:1)
我会说,你没有使用任何私人api,或任何与此相关的东西。我在App Store中得到了一些拒绝,但没有那样。我会说这是安全的,你只是隐藏了子视图。