2014-09-30 29 views
10

Tôi có một lớp con UIInputViewController đơn giản chỉ với hai phương pháp ghi đè. Tôi sử dụng bộ điều khiển xem đầu vào này là inputAccessoryViewController trên lớp con UIViewController của tôi để trở thành người trả lời đầu tiên. Tôi cố gắng xác định chiều cao của inputView bằng cách thêm ràng buộc như tài liệu của Apple khuyến cáo. Vấn đề là hạn chế của tôi không làm việc và tôi nhận được ngoại lệ autolayout khi hạn chế của tôi đang được thêmKhông thể thay đổi chiều cao UIInputView

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)]> 

Mà tôi nghĩ có nghĩa là hệ thống đã thêm một hạn chế zero chiều cao với quan điểm đầu vào (bởi vì nó được tạo ra với không chiều cao). Bây giờ họ xung đột và autolayout phá vỡ hạn chế của tôi để khắc phục vấn đề.

Khi tôi cố gắng sử dụng nó như inputViewController của bộ điều khiển chế độ xem của tôi (chỉ dành cho mục đích thử nghiệm), tôi nhận được ngoại lệ tương tự nhưng thay vì chiều cao bằng không, nó là 216 px. Nó cũng phá vỡ ràng buộc của tôi và chiều cao vẫn mặc định.

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 

    self.inputView.translatesAutoresizingMaskIntoConstraints = NO; 
    self.inputView.backgroundColor = [UIColor redColor]; 
} 

- (void)updateViewConstraints { 

    CGFloat _expandedHeight = 500; 
    NSLayoutConstraint *_heightConstraint = 
    [NSLayoutConstraint constraintWithItem:self.view 
           attribute:NSLayoutAttributeHeight 
           relatedBy:NSLayoutRelationEqual 
            toItem:nil 
           attribute:NSLayoutAttributeNotAnAttribute 
           multiplier:0.0 
            constant: _expandedHeight]; 
    [self.inputView addConstraint: _heightConstraint]; 

    [super updateViewConstraints]; 
} 

-(void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    [self.view setNeedsUpdateConstraints]; 
} 

Kết quả là tôi không thể thay đổi chiều cao chế độ xem phụ kiện đầu vào. Có ai thành công trong đó không? Rõ ràng, tài liệu Apple không cung cấp trợ giúp ...

+0

V: [self (0)] rất lạ - ai đã thêm hạn chế này? Rõ ràng, nó cần phải được cố định hoặc ít nhất là loại bỏ. – user3125367

+0

Có thể là một giải pháp hacky, nhưng trong updateConstraints thấy rằng ràng buộc 0/216 (thực sự tất cả các ràng buộc trên chiều cao chỉ, ngoại trừ của bạn) và đặt ưu tiên của nó là giá trị thấp hơn, cho nó được bỏ qua âm thầm trên các xung đột. – user3125367

+0

@ user3125367 "ai đã thêm ràng buộc này?" - câu hỏi chính xác Tôi đang tìm một câu trả lời cho :) Tôi sẽ cố gắng đề xuất của bạn và đăng bài sau, cảm ơn! – hybridcattt

Trả lời

2

Tôi không biết đây có phải là vấn đề không, nhưng vấn đề có thể đến từ hệ số 0.0 bạn đang thiết lập trên _heightConstraint. Hãy thử thay đổi nó thành 1.0.

Nó sẽ trông như thế này:

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

Hope this helps!

0

Tôi đã làm điều đó trong Swift. hy vọng điều này sẽ giúp bạn.

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

Khi bạn thực hiện một cái nhìn quan điểm phụ kiện đầu vào của một UITextView, ngay sau khi xem văn bản trở nên trả lời đầu tiên, một hạn chế chiều cao được thêm tự động thiết lập để bất cứ điều gì đã được gửi như chiều cao khung. Ví dụ:

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) 

Bạn có thể sửa đổi hạn chế này sau khi thực tế.

+0

lưu ý, chỉ hoạt động nếu bạn không có setTranslatesAutoresizingMaskIntoConstrants – moger777

+0

Đây phải là câu trả lời chính xác, phù hợp với tôi (miễn là các ràng buộc không được dịch sang tự động hóa mặt nạ) – Joshua

+0

Về chế độ xem InputAccessory của UIInputViewController không phải là một trong someTextView. Tôi không biết tại sao bạn đang nói về điều đó ...Nó độc lập với nhau – LKM

6

Vì iOS 9.0 có thể được giải quyết với inputView.allowsSelfSizing = YES;

Các vấn đề liên quan