2015-02-06 6 views
0

Я использую JSQMessagesController для проекта, над которым я работаю, и открыл проблему на странице Github, однако после некоторых консультаций с автором мы не смогли решить проблему ,iOS: какое событие запускается при появлении клавиатуры

У меня есть коллекцияView, которая заполняется списком сообщений, однако при первом просмотре представления верхнее сообщение отключается от верхней части экрана, когда клавиатура отображается и отклоняется, представление отображается так, как предполагалось показано ниже:

demonstrates broken message controller

Когда клавиатура отображается, это событие, очевидно, уволен который источ- раскладку, но что это? Я попытался следующие шаги:

self.collectionView.collectionViewLayout.invalidateLayout() 
self.collectionView.reloadData() 

Но это не исправило проблему - любое понимание будут оценены.

EDIT: После тестирования, иерархия зрения, кажется, быть признан недействительным, когда я установить фоновое изображение для зрения:

backgroundView = UIImageView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height)) 
backgroundView.image = UIImage(named: "background") 
self.view.insertSubview(backgroundView, atIndex: 0) 

Удаление этих линий избавляется от нежелательного верхнего края, однако воспитывая клавиатура по-прежнему устраняют сломанное ограничение.

+0

Вы должны установить верхнее ограничение UICollectionView в руководство Top Layout, так что представление правильно помещено под UINavigationBar – Lefteris

+0

Не могли бы вы дать ответ о том, как это сделать, чтобы я мог его принять? :) – Alex

+0

Вы используете раскадровки? – Lefteris

ответ

1

Вы пытались изменить вставки вида коллекции? Что-то вроде:

[self.collectionView setContentInset:UIEdgeInsetsMake(64.0, 0.0, 0.0, 0.0)];

+0

Спасибо Validimir - это сработало для меня :) – Alex

+0

Ты добрый :) –

0

Вы можете использовать delegate методы UITextField, которые вы используете:

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView

+0

Я бы использовал это, однако это кажется UITextView JSQMessageController является частным членом, и поэтому я не могу вызвать его метод делегирования вручную – Alex

+0

ах, я вижу, то неважно, мой ответ :) – nburk

+0

без проблем - спасибо в любом случае :) – Alex

1

Есть у пыталось ниже solution..at

- (пустоты) viewWillLayoutSubviews // (OR) - (void) viewDidLoad методы

self.navigationController.navigationBar.translucent = NO; 

if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) 
    self.edgesForExtendedLayout = UIRectEdgeNone; 

Надежда это помогает вам ...!

+0

Эй, это работает красиво - однако оно движется моя панель вкладок в верхней части экрана – Alex

1

Ну, обновлять ограничения в коде, вы должны сделать что-то вроде этого:

[self.collectionView removeConstraints:self.collectionView.constraints]; 
NSLayoutConstraint *top = [NSLayoutConstraint constraintWithItem:self.collectionView 
          attribute:NSLayoutAttributeTop 
          relatedBy:NSLayoutRelationEqual 
           toItem:self.topLayoutGuide 
          attribute:NSLayoutAttributeBottom 
          multiplier:1.0 
           constant:0.0]; 
NSLayoutConstraint *leading = [NSLayoutConstraint 
           constraintWithItem:self.collectionView 
           attribute:NSLayoutAttributeLeading 
           relatedBy:NSLayoutRelationEqual 
           toItem:self 
           attribute:NSLayoutAttributeLeading 
           multiplier:1.0f 
           constant:0.f]; 
NSLayoutConstraint *trailing = [NSLayoutConstraint 
           constraintWithItem:self.collectionView 
           attribute:NSLayoutAttributeTrailing 
           relatedBy:NSLayoutRelationEqual 
           toItem:self 
           attribute:NSLayoutAttributeTrailing 
           multiplier:1.0f 
           constant:0.f]; 
NSLayoutConstraint *bottom = [NSLayoutConstraint 
           constraintWithItem:self.collectionView 
           attribute:NSLayoutAttributeBottom 
           relatedBy:NSLayoutRelationEqual 
           toItem:self.bottomLayoutGuide 
           attribute:NSLayoutAttributeTop 
           multiplier:1.0f 
           constant:0.f]; 

[self.collectionView addConstraints:@[top,leading,trailing,bottom]]; 
Смежные вопросы