2014-02-06 2 views
6

Я использую textview и заметил, что iOS 7 оставляет верхнее поле по умолчанию. См изображение в следующем enter image description hereUITextView верхнее поле

Я читаю различные посты, в которых наиболее распространенным решением является использование:

[textViewTest setContentInset:UIEdgeInsetsMake(<#CGFloat top#>, <#CGFloat left#>, <#CGFloat bottom#>, <#CGFloat right#>)]; 

Но эти вставках лишь индивидуальное решение для конкретного устройства, TextView, размер шрифта, и скоро. Поэтому нет никаких конкретных вложений, применимых к любому решению ... даже хуже, мне пришлось бы программно определять разные вставки для учета всех устройств и ориентации iOS.

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

  • См изображение, когда клавиатура сделали шоу:

enter image description here

  • См изображение, когда клавиатура пошел:

enter image description here

Есть ли способ имитировать показ клавиатуры и скрытие? Так что содержимое вставки исчезает, как объясняется выше.

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

Заранее благодарен!

Мой код ниже:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
} 

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleKeyboardDidShow:) name:UIKeyboardDidShowNotification object:nil]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleKeyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; 
    if(self.topMarginIsAlreadyResized == NO) { 
     [self.myTextView becomeFirstResponder]; // Keyboard will show to eliminate top margin when view appears 
    } 
} 

- (void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
} 

- (void)handleKeyboardDidShow:(NSNotification *)notification { 
    if(self.topMarginIsAlreadyResized == NO) { 
     self.topMarginIsAlreadyResized = YES; // Once that keyboard has shown when view appears, we should hide it manually 
     [self.myTextView resignFirstResponder]; 
    } 
    NSValue *keyboardRectAsObject = [[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey]; 
    CGRect keyboardRect = CGRectZero; 
    [keyboardRectAsObject getValue:&keyboardRect]; 
    self.myTextView.contentInset = UIEdgeInsetsMake(0.0f, 0.0f, keyboardRect.size.height, 0.0f); 
} 

- (void)handleKeyboardWillHide:(NSNotification *)notification { 
    self.myTextView.contentInset = UIEdgeInsetsZero; 
} 
+0

Почему, по-вашему, вам нужен новый набор вставных вставок для каждого устройства и ориентации ...? – nhgrif

+0

Вы можете скомпрометировать первого ответчика в методе handleKeyboardDidShow. Он покажет вашу клавиатуру. – jailani

+0

То, что я пытаюсь достичь, - это устранить верхний край при загрузке контроллера. Есть идеи? Я знаю, что могу добиться этого, используя setContentInset (предоставляя ему только оценки), а также показывая клавиатуру и автоматически вычисляя setContentInset при учете клавиатуры. –

ответ

25

Это происходит потому, что йор вид контроллер установил свойство automaticallyAdjustsScrollViewInsets в YES, если вы установите его в NO все будет хорошо. См. Это question и принятый ответ для получения дополнительной информации.

+0

Да, правильно. Это правильное решение. – Biranchi

+0

Спасибо, приятель. Сделала работу. – Felipe

+0

Это работает !!!!!!! – Claus

Смежные вопросы