2014-09-30 8 views
10

Ich habe eine einfache UIInputViewController-Unterklasse mit nur zwei überschriebenen Methoden. Ich benutze diesen Input-View-Controller als inputAccessoryViewController in meiner UIViewController-Unterklasse, die First Responder wird. Ich versuche, die Höhe von inputView durch Hinzufügen von Constraint anzugeben, wie in der Apple-Dokumentation empfohlen. Problem ist, dass meine Einschränkung nicht funktioniert und ich automatische Layout-Ausnahme, wenn meine Einschränkung hinzugefügt wirdKann UIInputView Höhe nicht ändern

Unable to simultaneously satisfy constraints. 
Probably at least one of the constraints in the following list is one you don't want. 
... 
(
    "<NSLayoutConstraint:0x178aa1d0 V:[UIInputView:0x178a4ae0(0)]>", 
    "<NSLayoutConstraint:0x178b9520 V:[UIInputView:0x178a4ae0(500)]>" 
) 
Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x178b9520 V:[UIInputView:0x178a4ae0(500)]> 

Was ich denke, bedeutet, dass das System bereits eine Nullhöhe Einschränkung des Eingangs Ansicht hinzugefügt (weil es mit erstellt wird Null Höhe). Jetzt widersprechen sie und Autoplayout bricht meine Einschränkung, um das Problem zu beheben.

Wenn ich versuche, es als inputViewController meines View-Controllers zu verwenden (nur für Testzwecke), bekomme ich die gleiche Ausnahme, aber statt Null Höhe ist es 216 px. Es bricht auch meine Beschränkung und die Höhe bleibt Standard.

Daher kann ich die Höhe der Eingabezubehörhöhe nicht ändern. Hat jemand Erfolg damit? Offensichtlich bietet Apple Dokumentation keine Hilfe ...

+0

V gelöst werden? Offensichtlich muss es behoben oder zumindest entfernt werden. – user3125367

+0

Möglicherweise eine Lösung für Hacker, aber in updateConstraints finden Sie die 0/216-Einschränkung (eigentlich alle Einschränkungen nur für die Höhe, außer Ihrer) und setzen sie auf einen niedrigeren Wert, damit sie bei Konflikten lautlos übersprungen wird. – user3125367

+0

@ user3125367 "Wer hat diese Einschränkung hinzugefügt?" - genaue Frage Ich suche eine Antwort für :) Ich werde deinen Vorschlag versuchen und später posten, danke! – hybridcattt

Antwort

2

Ich weiß nicht, ob dies das Problem ist, aber das Problem kann von der 0.0 Multiplikator kommen Sie auf _heightConstraint setzen. Versuchen Sie, es in 1.0 zu ändern.

Es würde wie folgt aussehen:

NSLayoutConstraint *_heightConstraint = 
    [NSLayoutConstraint constraintWithItem:self.view 
           attribute:NSLayoutAttributeHeight 
           relatedBy:NSLayoutRelationEqual 
            toItem:nil 
           attribute:NSLayoutAttributeNotAnAttribute 
           multiplier:1.0 
            constant: _expandedHeight]; 

hoffe, das hilft!

0

Ich habe es in Swift getan. hoffe das hilft dir.

override func viewDidAppear(animated: Bool) { 

    let heightConstraint = NSLayoutConstraint(
     item:self.view, 
     attribute:NSLayoutAttribute.Height, 
     relatedBy:NSLayoutRelation.Equal, 
     toItem:nil, 
     attribute:NSLayoutAttribute.NotAnAttribute, 
     multiplier:0.0, 
     constant:100) 

    self.view.addConstraint(heightConstraint) 
} 
1

Wenn Sie eine Ansicht, die Eingabezubehöransicht eines UITextView machen, sobald die Textansicht Ersthelfer wird, wird hinzugefügt, um eine Höhenbeschränkung automatisch eingestellt, was auch immer als die Rahmenhöhe gesendet wurde. Zum Beispiel:

let inputView = UIInputView(frame: CGRectMake(0, 0, view.bounds.width, 200), 
    inputViewStyle: .Default) 
someTextView.inputAccessoryView = inputView 
someTextView.becomeFirstResponder() 
assert((inputView.constraints().last as NSLayoutConstraint).constant == 200) 

Sie können diese Einschränkung nachträglich ändern. [Self (0)] ist sehr seltsam -, die diese Einschränkung hinzugefügt:

+0

Hinweis, funktioniert nur, wenn Sie nicht gesetzt habenTranslateAutoresizingMaskIntoConstrants – moger777

+0

Dies sollte die richtige Antwort sein, funktioniert für mich (solange Einschränkungen nicht in Autoresizing-Maske übersetzt werden) – Joshua

+0

Es handelt sich um die InputAccessory Ansicht von UIInputViewController nicht die von someTextView. Ich weiß nicht, warum du darüber sprichst ...Es ist unabhängig voneinander – LKM

6

Seit iOS 9.0 kann dies mit inputView.allowsSelfSizing = YES;