在我的应用程序中,我有很多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
答案 0 :(得分:2)
由于iOS9 automaticallyadjustsscrollviewinsets
不会更改UIScrollView
contentInsets
,如果它是以编程方式创建的。
UITableViewController
进行自动调整。automaticallyadjustsscrollviewinsets
并自行调整插图。