Изменение показателей для нового симулятора iOS в Xcode 6

#ios #cocoa-touch #ios-simulator #ios8 #xcode6

#iOS #cocoa-touch #ios-симулятор #ios8 #xcode6

Вопрос:

Мое приложение отлично работает в Xcode 5 на симуляторе iPad retina, но когда я запускаю симулятор в том же проекте с Xcode 6 на симуляторе iPad retina, этот небольшой фрагмент кода :

 UIView *firstResp = [self.view findFirstResponder];
CGRect firstResponderFrame = [firstResp convertRect:firstResp.bounds toView:self.view];


NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

if (firstResponderFrame.origin.y firstResponderFrame.size.height 40-self.scrollView.contentOffset.y > self.view.window.frame.size.width-kbSize.width) {
    dispatch_async(dispatch_get_main_queue(), ^{
        [self.scrollView setContentOffset:CGPointMake(0, firstResponderFrame.origin.y-self.view.window.frame.size.width/2 100 firstResponderFrame.size.height/2) animated:YES];
    });


}
  

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

В Xcode 6 ошибок не отображается. Метрика, похоже, такая же, как и в моем первоначальном тестировании разных фреймов. Я использую NSNotification для клавиатуры: может быть, в этом причина?

Этот код также находится в контроллере представления внутри контроллера представления контейнера в другом VC.

На самом деле это не конкретный вопрос, но мне очень любопытно, почему это не сработает. Я работаю на iOS 7.1 в обеих версиях Xcode. Симулятор в Xcode 6 показывает iOS 8 в строке заголовка окна, но мое приложение настроено для запуска на iOS 7.1.

**

Редактировать:

** NVM .. нашел его. Я недостаточно тщательно тестировал, прежде чем спрашивать. Для тех, кому интересно, в IOS 7 была ошибка, из-за которой высота и ширина оставались неизменными, даже если ориентация изменилась, насколько мне известно, это произошло с view.window.frame и размером клавиатуры.. Похоже, эта ошибка исчезла для iOS 8.

Ответ №1:

Исправление ошибки iOS 7 для ширины и высоты в портретной ориентации — я надеюсь, что это поможет кому-нибудь в будущем при миграции на iOS8.

 // Called when the UIKeyboardDidShowNotification is sent.
   - (void)keyboardWillShow:(NSNotification*)aNotification
   {
   [self UpdatePatientFromForm];
    UIView *firstResp = [self.view findFirstResponder];
    CGRect firstResponderFrame = [firstResp convertRect:firstResp.bounds toView:self.view];


    NSDictionary* info = [aNotification userInfo];
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

    //Account for iOS 7 inversion of height and width
    CGFloat kbHeight = (kbSize.width>kbSize.height)? kbSize.height : kbSize.width;
    CGFloat windowHeight = (self.view.window.frame.size.width>self.view.window.frame.size.height)? self.view.window.frame.size.height : self.view.window.frame.size.width;
    CGFloat visibleScreenHeight = windowHeight - kbHeight;


    if (firstResponderFrame.origin.y firstResponderFrame.size.height 100-self.scrollView.contentOffset.y > visibleScreenHeight) {
        dispatch_async(dispatch_get_main_queue(), ^{
            [self.scrollView setContentOffset:CGPointMake(0, firstResponderFrame.origin.y-windowHeight/2 100 firstResponderFrame.size.height/2) animated:YES];
        });   
    }  
}