UIImagePickerController显示的VIDEO_TOO_LONG_TITLE警报

时间:2016-10-29 08:10:25

标签: ios uiimagepickercontroller alert

我使用UIImagePickerController拍电影。通过设置控制器的videoMaximumDuration属性来限制电影的长度 当试图播放更长的电影时,会按预期显示警报。

然而名为 VIDEO_TOO_LONG_TITLE 意外的附加提醒会直接显示在控件上方(参见下图)。
显然这是一个iOS错误(仅部分本地化,没有选择剪辑)。

是否可以隐藏这种不必要且不适当的警报?

enter image description here

2 个答案:

答案 0 :(得分:2)

imagePicker.allowsEditing = false

答案 1 :(得分:1)

我知道这个问题已经很老了,但这是苹果仍然无法解决的问题的解决方案。

@implementation NSBundle (UIImagePickerControllerLocalizationFix)

+ (void) load {
    SEL const selector = @selector (localizedStringForKey:value:table:);
    Method const localizedStringMethod = class_getInstanceMethod (self, selector);
    NSString *(*originalImp) (NSBundle *, SEL, NSString *, NSString *, NSString *) = (typeof (originalImp)) method_getImplementation (localizedStringMethod);
    IMP const updatedImp = (typeof (updatedImp)) imp_implementationWithBlock (^(NSBundle *bundle, NSString *key, NSString *value, NSString *tableName) {
        NSString *const result = originalImp (bundle, selector, key, value, tableName);
        if ([key isEqualToString:@"VIDEO_TOO_LONG_TITLE"] && [result isEqualToString:key]) {
            static NSBundle *properLocalizationBundle = nil;
            static NSString *properLocalizationTable = nil;
            static dispatch_once_t onceToken;
            dispatch_once (&onceToken, ^{
                NSString *const originalBundleName = bundle.infoDictionary [(NSString *) kCFBundleNameKey];
                NSArray <NSBundle *> *const frameworkBundles = [NSBundle allFrameworks];
                for (NSBundle *frameworkBundle in frameworkBundles) {
                    NSString *const possibleTableName = [originalBundleName isEqualToString:tableName] ? frameworkBundle.infoDictionary [(NSString *) kCFBundleNameKey] : tableName;
                    NSString *const localizedKey = originalImp (frameworkBundle, selector, key, value, possibleTableName);
                    if (![localizedKey isEqualToString:key]) {
                        properLocalizationBundle = frameworkBundle;
                        properLocalizationTable = possibleTableName;
                        break;
                    }
                }

                if (!(properLocalizationBundle && properLocalizationTable)) { // Giving up
                    properLocalizationBundle = bundle;
                    properLocalizationTable = tableName;
                }
            });

            return originalImp (properLocalizationBundle, selector, key, value, properLocalizationTable);
        } else {
            return result;
        }
    });
    method_setImplementation (localizedStringMethod, updatedImp);
}

@end