ECSlidingViewController

ECSlidingViewController

我将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.
}

07-26 08:06