uikit – automaAdjustsScrollViewInsets在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

最佳答案 由于iOS9自动调整滚动视图集不会更改UIScrollView的contentInsets,如果它是以编程方式创建的.

> a)您可以使用UITableViewController进行自动调整.
> b)自动设置自动调整视图集并自行调整插入.

点赞