2014-08-28 3 views
1

Я создаю пользовательскую клавиатуру для iOS8 и в документах разработчика Apple, в которой говорится, что вы можете изменить высоту пользовательской клавиатуры в любое время после того, как начальный первичный вид рисует на экране. И он говорит, чтобы сделать это, вы должны использовать метод .addConstaint().iOS .addConstraint работает только один раз

Вот ссылка: https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/ExtensibilityPG/Keyboard.html

Я использую Swift. Начальная высота клавиатуры - 215 пикселей. У меня есть жест, который увеличивает высоту до 350 пикселей. Что работает, как ожидалось. И проведите пальцем вниз, чтобы изменить высоту до 300 пикселей.

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

Таким образом, я был бы любезен, если бы кто-нибудь мог взглянуть на мои две функции и сказать мне, что я делаю неправильно.

Вот код:

// IBActions 
@IBAction func action1(sender: AnyObject) { 

    if topboxvisible == false { 
     topboxvisible = true 
    UIView.animateWithDuration(0.08, delay: 0, options: .CurveEaseIn, animations: { 
     self.topbox.frame.offset(dx: 0, dy: 40) 

     }, completion: nil) 
    } 
    let expandedHeight:CGFloat = 300 
    let heightConstraint = NSLayoutConstraint(item:self.view, 
     attribute: .Height, 
     relatedBy: .Equal, 
     toItem: nil, 
     attribute: .NotAnAttribute, 
     multiplier: 0.0, 
     constant: expandedHeight) 
    self.view.removeConstraint(heightConstraint) 
    self.view.addConstraint(heightConstraint) 
} 

@IBAction func action2(sender: AnyObject) { 
    if topboxvisible == true { 
     topboxvisible = false 
    UIView.animateWithDuration(0.08, delay: 0, options: .CurveEaseOut, animations: { 
     self.topbox.frame.offset(dx: 0, dy: -40) 
     }, completion: nil) 
    } 
    let expandedHeight:CGFloat = 350 
    let heightConstraint = NSLayoutConstraint(item:self.view, 
     attribute: .Height, 
     relatedBy: .Equal, 
     toItem: nil, 
     attribute: .NotAnAttribute, 
     multiplier: 0.0, 
     constant: expandedHeight) 
    self.view.removeConstraint(heightConstraint) 
    self.view.addConstraint(heightConstraint) 

} 

ответ

1

Ваши removeConstraint звонки ничего не делают, потому что вы только что создали (в предыдущей строке кода) ограничение не в представлении. Так что вы делаете здесь, каждый раз добавляете больше ограничений, из того, что я вижу. Я предполагаю, что это приводит к нескольким конфликтующим ограничениям - видите ли какие-либо предупреждения NSConstraint, появляющиеся в журнале консоли, когда вы используете код?

Попробуйте это: заранее создайте оба ограничения по высоте и сохраните их в переменных экземпляра. В action1 удалите ограничение 350-го уровня и добавьте 300. В action2 удалите 300 и добавьте 350.

+0

Консоль пуста, когда я запускаю клавиатуру, даже когда я выдвигаюсь вверх и вниз, чтобы создать ограничения. Также, когда я беру NSLayoutConstraint за пределами IBAction, он говорит, что KeyboardViewController не имеет имени с именем 'view'. Извините, если это ошибка nooby! – Francis

+1

Журнал расширения не может отображаться на консоли, вам нужно увидеть его в окне -> Устройства. – heheBear

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