在我的应用程序中,我有很多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)自动设置自动调整视图集并自行调整插入.