iOS 7如何实现UI元素,使它们看起来不同,具体取决于您编译的SDK?

Jav*_*oto 14 iphone ios ios7

在iOS 7上有像UITableViews,UINavigationBars这样的元素具有不同的风格.

这种风格在运行时确定,因为这几类实现上UIKit,并UIKit与您在运行时动态,而不是在编译时静态链接的应用.

因此,人们可能会认为在iOS 7的任何应用程序的运行将有那些元素,看起来他们希望在iOS 7的方式.然而,他们继续他们曾经有过在iOS 6,直到你跟iOS 7 SDK编译相同的风格.除了其中一些(如UIAlertViewUIMenuController)

我对此的唯一解释是他们做了类似这样的事情:

#define SDKApplicationWasLinkedAgainst ...
if (SDKApplicationWasLinkedAgainst < 7.0)
    ...
else
    ...
Run Code Online (Sandbox Code Playgroud)

这显然非常麻烦,因为他们需要继续维护很多旧代码.所以我很好奇,这真的是引擎盖下的事情吗?我错过了什么?

sud*_*-rf 9

如果没有过多地进入NDA的领域,我只想表明是的,他们根据以下调用的结果来条件化外观和行为:

_UIApplicationUsesLegacyUI()
Run Code Online (Sandbox Code Playgroud)

反过来,这个函数调用GSApplicationUsesLegacyUI(),我假设它返回一个基于链接的UIKit版本的结果.

这意味着是的,他们将条件化UIKit的部分遗留下来.不确定这是件好事,但这就是他们决定做的事情.