Arhn - архитектура программирования

Установите ограничение нижнего пространства UIView на высоту клавиатуры

Я большой поклонник автомакета, но всегда реализовывал его в раскадровке.

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

Я определил все свои ограничения, может ли кто-нибудь показать мне, как реализовать это ограничение в коде только для нижнего пространства? А также как получить значение высоты клавиатуры в зависимости от конкретного iDevice и сопоставить его с ограничением.

Спасибо

05.08.2015


Ответы:


1

Возьмите выход нижнего ограничения вида, подобного этому

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *constraintContainerBottom;

и использовать это

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self setupKeyboard:YES];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [self setupKeyboard:NO];
}

- (void)setupKeyboard:(BOOL)appearing
{
    if (appearing) {
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
    }else{
        [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
        [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
    }
}

- (void)keyboardWillShow:(NSNotification*)notification
{
    CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
    double duration = [[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
    int curve = [[[notification userInfo] objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue];
    [UIView beginAnimations:@"keyboardShown" context:nil];
    [UIView setAnimationDuration:duration];
    [UIView setAnimationCurve:curve];

    self.constraintContainerBottom.constant = keyboardSize.height;
    [self.view layoutIfNeeded];

    [UIView setAnimationDelegate:self];
    [UIView commitAnimations];
}

- (void)keyboardWillHide:(NSNotification*)notification
{
    double duration = [[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
    int curve = [[[notification userInfo] objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue];
    [UIView beginAnimations:@"keyboardHidden" context:nil];
    [UIView setAnimationDuration:duration];
    [UIView setAnimationCurve:curve];

    self.constraintContainerBottom.constant = 0;
    [self.view layoutIfNeeded];

    [UIView setAnimationDelegate:self];
    [UIView commitAnimations];
}
05.08.2015
  • ограничение не является свойством NSLayoutConstraint IBOutlet...? 05.08.2015
  • @ nickjf89 Это зависит от того, как ты себя ведешь. Это решение хорошее. :) Я думаю, это работа. 05.08.2015
  • на самом деле это будет постоянно ... я обновил ответ. 05.08.2015
  • Извините, если я глуп... Как мне установить IBOutlet для ограничения моего UIView? 05.08.2015
  • просто дважды щелкните ограничение, а затем на левой панели будет выбрано ограничение. просто перетащите его в нужный файл класса и задайте имя. 05.08.2015
  • Идеальный. Большое тебе спасибо!! 05.08.2015
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..