我正在使用QuickLook查看PDF文件。
它在iOS 7.1中正常运行,但iOS 8 GM会出现一些问题。
图片比文字好,我想告诉你问题:
iOS 7.1 Xcode 6(正常工作)
使用QuickLook进行转换(无失败)
页面滚动,navigationBar隐藏得很好
-------------------------------------------- ------------------------------
现在,iOS 8 GM与Xcode 6
使用QuickLook转换...
页面滚动,导航栏不隐藏,页面指示器隐藏在NavigationBar后面
与iPhone模拟器,iPad模拟器,iPhone设备和iPad设备相同。
你可以在这里看到我的源代码:
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)previewController
{
NSInteger numToPreview = 0;
if (currentSection == CVSectionConvocations)
numToPreview = self.convocation.convocations.count;
else if (currentSection == CVSectionAttachments)
numToPreview = self.convocation.attachements.count;
return numToPreview;
}
- (id)previewController:(QLPreviewController *)previewController previewItemAtIndex:(NSInteger)idx
{
PDF *pdf;
if (currentSection == CVSectionConvocations)
pdf = self.convocation.convocations[idx];
else if (currentSection == CVSectionAttachments)
pdf = self.convocation.attachements[idx];
return [pdf path];
}
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
// determine section
currentSection = (indexPath.section == 0 ? CVSectionConvocations : CVSectionAttachments);
PDF *pdf;
if (currentSection == CVSectionConvocations)
pdf = self.convocation.convocations[indexPath.row];
else if (currentSection == CVSectionAttachments)
pdf = self.convocation.attachements[indexPath.row];
if ([pdf isStored]) {
QLPreviewController *previewController = [[QLPreviewController alloc] init];
previewController.dataSource = self;
previewController.delegate = self;
previewController.currentPreviewItemIndex = indexPath.row;
[[self navigationController] pushViewController:previewController animated:YES];
} else {
[self displayMessage:@"Document not found" title:@"Oups !"];
}
}
感谢您的帮助;)
答案 0 :(得分:2)
我在过渡时遇到了同样的问题。我的解决方案是将previewController存储在一个属性中,并在我的呈现视图控制器中的viewDidLoad中初始化一次。
每次推动预览控制器时,我还必须将currentPreviewItemIndex设置为等于0,尽管我此时只显示一个文件。如果我没有设置值,默认情况下不打开zip文件,并且预览控制器会显示“显示内容”。相反,它将打开一个遇到相同转换问题的新预览控制器。
我还在尝试修复不隐藏的导航栏问题。在apple sample project中一切正常。似乎模态显示导航控制器会导致我的项目出现问题。
编辑:
这对我来说肯定是一个错误。仅当导航控制器呈现为模态时,才会显示导航栏的问题。在我看来,预览控制器创建了一个新的导航控制器和一个新的导航栏。这个隐藏在主机导航控制器的导航栏下。此屏幕截图显示了问题:
蓝色突出显示的栏是self.navigationBar,蓝色框架栏属于预览控制器。只有当导航控制器呈现为模态时,才会发生这种情况。
我的解决方法是将我的视图控制器设置为导航控制器委托,并在推送预览控制器后立即隐藏导航栏。我只在iOS 8.0和8.1上测试了我的代码。
- (void)viewDidLoad {
[super viewDidLoad];
self.previewController = [[QLPreviewController alloc] init];
self.previewController.delegate = self;
self.previewController.dataSource = self;
self.navigationController.delegate = self;
}
-(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
// Workaround:
// If the previewController is pushed to a navigation controller which is presented modal, it appears that the preview controller adds a second navigation bar (and navigation controller).
// This results in a UI glitch that one nav bar is always visible. To prevent this we hide our navigation bar so that only the one owned by the preview controller is visible.
// Note that this only happends if the navigation controller is presented modal, thus it seems to be an iOS bug.
if (viewController == self.previewController) {
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
}
答案 1 :(得分:1)
我最近能够解决背景问题错误(动画仍然不稳定)。
修复黑色背景'问题我在推送时设置导航控制器的自定义背景颜色。当返回我的视图控制器时,我确保将原始背景颜色恢复为nil。
- (void)viewWillApear:(BOOL)animated {
[super viewWillApear:animated];
self.navigationController.view.backgroundColor = nil;
// Optional - In order to ease the animation bug
self.view.alpha = 1.0;
}
- (void)viewWillDissapear:(BOOL)animated {
[super viewWillDissapear:animated];
self.navigationController.view.backgroundColor = [UIColor whiteColor];
// Optional - In order to ease the animation bug
[UIView animateWithDuration:0.35 animations:^{
self.view.alpha = 0.0;
}];
}
此代码应转到您正在推送QLPreviewController的视图控制器。
这个解决方案肯定是最好的解决方案,但希望它有所帮助!