automaAdjustsScrollViewInsets在iOS9中不起作用

时间:2015-09-18 10:48:01

标签: uikit ios9

在我的应用程序中,我有很多VC,其中包含各种滚动视图(表格,集合等)。所有这些都出现在NavigationController中,我使用VC的.automaticallyadjustsscrollviewinsets属性来阻止内容进入NavigationBar。它在iOS9之前工作正常。

我昨天将我的测试iPhone更新到了iOS9,并注意到所有的滚动视图现在都没有适当的插图。我已经将XCode更新到最新版本(7.0)并重建了应用程序 - 没有效果。我已经检查了仍在运行iOS8.x的其他设备 - insets正常工作。我查看了iOS9 sdk更改日志,但没有找到与我的问题相关的任何内容。这是一个错误还是一个新行为?其他人有这个问题吗?可能的解决方案?

UPDATE1

我想出了快速解决方法:

if (__iOS_9_OR_GREATER__) {

    CGFloat topInset = 20;

    if (self.navigationController) {
        topInset += self.navigationController.navigationBar.bounds.size.height;
    }

    UIEdgeInsets insets = UIEdgeInsetsMake(topInset, 0, 0, 0);

    self.collectionView.contentInset = insets;
    self.collectionView.scrollIndicatorInsets = insets;

}

有效。但问题仍然存在,这是iOS9中的一个错误吗?

UPDATE2

回答有关__iOS_9_OR_GREATER__的评论中的问题。可能不是最有效的解决方案,但可以完成工作。

#import <Foundation/Foundation.h>

#define __iOS_9_OR_GREATER__ [NKOSVersionCheck isMajorOSVersionAtLeast:9]

@interface NKOSVersionCheck : NSObject

+ (BOOL)isMajorOSVersionAtLeast:(NSUInteger)version;

@end

#import "NKOSVersionCheck.h"

@implementation NKOSVersionCheck

NSOperatingSystemVersion _majorOSVersion(int version) {

    NSOperatingSystemVersion iOS_x;
    iOS_x.majorVersion = version;
    iOS_x.minorVersion = 0;
    iOS_x.patchVersion = 0;

    return iOS_x;

}

+ (BOOL)isMajorOSVersionAtLeast:(NSUInteger)version {

    return [[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:_majorOSVersion(9)];

}


@end

1 个答案:

答案 0 :(得分:2)

由于iOS9 automaticallyadjustsscrollviewinsets不会更改UIScrollView contentInsets,如果它是以编程方式创建的。

  • a)您可以使用UITableViewController进行自动调整。
  • b)设置automaticallyadjustsscrollviewinsets并自行调整插图。