无法更改UIInputView高度

我有一个简单的UIInputViewController子类只有两个重写的方法。 我使用这个input视图控制器作为我的UIViewController子类成为第一响应者的inputAccessoryViewController 。 我尝试通过添加约束来指定inputView的高度,如Apple文档所build议的。 问题是我的约束不起作用,当我的约束被添加时,我得到autolayoutexception

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

我认为这意味着系统已经为input视图添加了零高度约束(因为它是以零高度创build的)。 现在他们冲突和自动布局打破了我的约束来解决这个问题。

当我尝试使用它作为我的视图控制器的inputViewController (仅用于testing目的),我得到相同的exception,而不是零高度是216像素。 它也打破了我的约束,高度保持默认。

 - (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]; } 

因此,我无法更改input配件视图高度。 有没有人能成功? 显然,苹果文档没有提供帮助…

inputView.allowsSelfSizing = YES;以来,这可以通过inputView.allowsSelfSizing = YES;来解决inputView.allowsSelfSizing = YES;

我不知道这是否是问题,但问题可能来自您在_heightConstraint上设置的0.0乘数。 尝试将其更改为1.0。

它看起来像这样:

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

希望这可以帮助!

当您查看UITextView的input附件视图时,只要文本视图成为第一个响应者,就会自动添加一个高度约束,以将其作为帧高度发送。 例如:

 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) 

事实上你可以修改这个约束。

我在Swift中做过 希望这可以帮助你。

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