无法更改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) }
- 以编程方式创builduiTabBarController
- 已弃用“kCFStreamSSLAllowsExpiredCertificates”和“kCFStreamSSLAllowsAnyRoot”
- iOS6中的手势识别器和自动布局,从中心缩放
- 组表TableView,使用自调整节标题,重新加载后,如果向上滚动,tableview将跳转
- iOS 8的自我大小单元不适用于UITableViewCellStyleSubtitle和numberOfLines = 0?
- 在自动布局的情况下,IOS滚动查看模糊的可滚动内容高度
- 自动布局具有dynamic高度子视图的UIScrollView
- 为UIScrollView设置约束
- Autolayout在iOS 8上工作正常,但在iOS 6和7(我使用XCode 6.2)上performance不佳,
- 在iPhone上使用Xcode Auto Layout来设置不同的图像尺寸
- AutoLayout多行UILabel剪掉一些文字