Значение типа 'UIView' не имеет члена 'constant' - PullRequest
1 голос
/ 11 февраля 2020
@objc  func handleKeyboardDidShow (notification: NSNotification)
{
    let keyboardRectAsObject = notification.userInfo![UIResponder.keyboardFrameEndUserInfoKey] as! NSValue

    var keyboardRect = CGRect.zero

    keyboardRectAsObject.getValue(&keyboardRect)

    self.changePassView.constant = -1 * keyboardRect.height/2

    UIView.animate(withDuration: 0.5,animations: {

        self.view.layoutIfNeeded()

    })
}

Кто-нибудь может мне помочь? Почему я получаю эту ошибку, поскольку я новичок в iOS и изучаю этот язык.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020

UIViews содержат информацию о собственной внешности и содержании.

NSLayoutConstraints часто добавляются в UIViews, чтобы изменить их распределение по экрану.

Вы получаете сообщение об ошибке, поскольку пытаетесь получить доступ к свойству constant, которое не найдено в UIViews. Вы близко, хотя. Вам нужен NSLayoutConstraint.

Шаг 1: Установите ограничения

Вы можете сделать это программно ( подробнее здесь ) или с помощью раскадровки / перья. Вот пошаговое описание подхода раскадровки / кончика:

  1. Добавьте ограничение в раскадровку или кончик с автоматическим макетом.
  2. Создайте переменную NSLayoutConstraint в своем UIView класс.
  3. Вернувшись в раскадровку, найдите вновь созданное ограничение. Он будет отображаться в вашем навигаторе слева, рядом с вашим UIView.
  4. Выберите ограничение, которое вы ищете, и перейдите на крайнюю правую вкладку правой панели Xcode.
  5. Перетащите «Новый источник ссылок» с правой панели в класс UIViewController в вашем навигаторе представлений.
  6. Если все сделано правильно, появится опция для вашего нового NSLayoutConstraint. Выберите это.

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

Шаг 2: Соедините все вместе

Получите доступ к вашему значению NSLayoutConstraint * constant. Ваш код должен выглядеть примерно так после завершения всех вышеперечисленных шагов:

// In your class's definitions.
// This is what you'll have to link programmatically or in your storyboard/nib
@IBOutlet var changePassViewBottomConstraint: NSLayoutConstraint!

// Later on in your function:
self.changePassViewBottomConstraint.constant = -1 * keyboardRect.height/2
0 голосов
/ 11 февраля 2020

self.changePassView.constant = -1 * keyboardRect.height/2

Вы получаете сообщение об ошибке, потому что пытаетесь получить доступ к свойству constant в self.changePassView, которое, по-видимому, UIView. Похоже, вы пытаетесь изменить значение нижнего ограничения представления, но ограничение макета - это отдельный объект, который вам нужно получить, прежде чем вы сможете установить его значение. Это может помочь: Как программно получить ограничение "bottomSpace" из UIView?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...