我将ECSlidingViewController
用于“汉堡”菜单。我使用的是SDK 7.0,但我将部署目标更改为iOS 6.1,现在我尝试使用的旧iOS 7上的应用程序。问题出在setEdgesForExtendedLayout
。对于较旧的系统版本,存在较旧的ECSlidingViewController
。所以我的问题是如何更改为使用iOS 6.1的旧版本和iOS 7.0及更高版本的旧版本和较新版本。我包括两个ECSlidingViewController
项目的文件(不是cocoapods提供的文件,但是如果需要,则更改它不是问题)。我想我需要检查OS版本,然后更改导入,但是我不确定这是否足够以及两个项目的最佳名称约定。我想它们应该位于不同的文件夹中(例如ECSlidingViewController和ECSlidingViewControllerOld),但是类应该使用相同的名称,对吗?
编辑:带有edgesForExtendedLayout
的代码示例:
- (CGRect)underLeftViewCalculatedFrameForTopViewPosition:(ECSlidingViewControllerTopViewPosition)position {
CGRect frameFromDelegate = [self frameFromDelegateForViewController:self.underLeftViewController
topViewPosition:position];
if (!CGRectIsInfinite(frameFromDelegate)) return frameFromDelegate;
CGRect containerViewFrame = self.view.bounds;
if (!(self.underLeftViewController.edgesForExtendedLayout & UIRectEdgeTop)) {
CGFloat topLayoutGuideLength = [self.topLayoutGuide length];
containerViewFrame.origin.y = topLayoutGuideLength;
containerViewFrame.size.height -= topLayoutGuideLength;
}
if (!(self.underLeftViewController.edgesForExtendedLayout & UIRectEdgeBottom)) {
CGFloat bottomLayoutGuideLength = [self.bottomLayoutGuide length];
containerViewFrame.size.height -= bottomLayoutGuideLength;
}
if (!(self.underLeftViewController.edgesForExtendedLayout & UIRectEdgeRight)) {
containerViewFrame.size.width = self.anchorRightRevealAmount;
}
return containerViewFrame;
}
最佳答案
我不喜欢包含重复版本的库,因为这会给命名带来很大的问题,并且需要进行大量工作来重构所有旧类以使其具有*-OLD
后缀。由于您有权访问源代码,因此可以像这样修改较新的版本:
if(NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1)
{
[vc setEdgesForExtendedLayout:UIRectEdgeNone];
//Any other iOS7-specific code.
}