2016-03-04 3 views
6

Я только что получил этот отчет об ошибке для меня приложение ... контроллер вида активности внезапно оказался в этой странной узкой форме, нахожусь ли я на фактическом телефоне или контроллере представления.UIActivityViewController имеет странный размер и форму

Narrow view controller

Это происходит с некоторым простым кодом ваниль, которая не была затронута в месяцах:

UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[message] applicationActivities:nil]; 
[self presentViewController:activityViewController animated:YES completion:nil]; 

Что может быть неправильно? Я даже не могу придумать, где начать устранение этой проблемы.

+0

вы настройку вам размер окна в приложении делегат –

+0

этот скриншот 1/3 IPad? – techloverr

+2

воспроизводится каждый раз, укажите код для тестирования – techloverr

ответ

1

Вы должны проверить рамки для просмотра себя. Вероятно, его ширина меньше ширины операции ActivityViewController , и вы получаете эту ошибку.

2

Возможно, self.view.frame.size.width есть проблема. Вы можете найти свою рамку с NSLogself.view. Простой обходной путь может быть:

[self.view.window.rootViewController presentViewController:activityViewController animated:YES completion:nil]; 
1

Эти виды ошибок происходят, и они действительно испытать ваше терпение и дать вам вызов. Хотя я не могу дать однозначного ответа, я могу дать вам несколько советов о том, как устранить эту проблему!

Что я предлагаю, так это то, что вы сначала попытаетесь воссоздать это на своей машине разработки. Затем попробуйте поиграть и посмотреть, что вызывает проблему. Вот некоторые вещи, чтобы попробовать.

  • Запустите это на нескольких устройствах с различными ОС, чтобы вы могли определить шаблон.

  • Попробуйте изменить значение «initWithActivityItems» и см. , возникает ли проблема.

  • Посмотрите, существует ли проблема, если вы попытаетесь создать объект ActivityViewControllerс другого контроллера представления.

  • Просматривайте код и узнайте, есть ли предупреждения, которые вы просто игнорировали. Специально, если вы используете раскадровки для , создавая представление.

Я знаю, что это не ответ, но я не могу отправить такой длинный ответ, как комментарий.

Надеюсь, это поможет!

2

В некоторых случаях это может произойти. Попробуйте

NSArray *Items = [NSArray arrayWithObjects: 
        @"Checking Test App", nil]; 
UIActivityViewController *activity=[[UIActivityViewController alloc]initWithActivityItems:Items applicationActivities:nil]; 
[self presentViewController:activity animated:YES completion:nil]; 

или

NSString *string = NSLocalizedString(@"shareString", nil); 
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] 
                initWithActivityItems:@[string] applicationActivities:nil]; 

[activityViewController setCompletionWithItemsHandler: 
^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *error) 
{ 
    if (completed) { 
     NSLog(@"sharing complete"); 
    } else 
    { 
     NSLog(@"cancelled"); 
    } 
}]; 

[self presentViewController:activityViewController animated:YES completion:^{ 
}]; 
1

Вы пробовали воспроизвести эту ошибку ??? Если у нас нет точного сценария создания этой ошибки, мы не сможем решить ее! Попробуйте обновить элементы в массиве и проверить, существует ли еще ошибка ... Подобные вещи случаются иногда, но до тех пор, пока мы не воспроизведем этот сценарий, его нельзя назвать ошибкой.

В любом случае, если вы работаете в универсальное приложение добавьте ниже строки кода до представления ActivityView

ActivityViewController.popoverPresentationController.sourceView = self.view; 
[self presentViewController:activityViewController animated:YES completion:nil]; 

Я предложить, вместо того, чтобы искать решение выкопать проблему первого. Я никогда не видел такого странного поведения ActivityView до этого, и если мы знаем, почему это произошло, то это будет полезной для каждого разработчика iOS.

1

Если вы на IPad, попробуйте установить popoverPresentationController свойства sourceRect

NSString *string = NSLocalizedString(@"shareString", nil); 
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:@[string] applicationActivities:nil]; 

activityVC.popoverPresentationController.sourceView = self.view; 
activityVC.popoverPresentationController.sourceRect = CGRectMake(self.view.bounds.size.width/2.0, self.view.bounds.size.height-50, 1.0, 1.0); 

[self presentViewController:activityVC animated:YES completion:nil]; 
Смежные вопросы