为了账号安全,请及时绑定邮箱和手机立即绑定

iOS 8自定义键盘:更改高度

iOS 8自定义键盘:更改高度

iOS
皈依舞 2019-10-16 12:45:25
我试图在iOS 8中创建一个自定义键盘来替换普通键盘。我确实进行了搜索,无法确定是否可以创建比现有iOS键盘高的键盘。我替换了UIInputView,但无法更改对我可用的高度。
查看完整描述

3 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

最近,Apple更新了其App扩展编程指南,以更改自定义键盘扩展的高度:


CGFloat _expandedHeight = 500;


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


[self.view addConstraint: _heightConstraint];


查看完整回答
反对 回复 2019-10-16
?
守着一只汪

TA贡献1872条经验 获得超3个赞

这是我发现导致高度正确更新的最小解决方案。似乎有两个关键组成部分:


translatesAutoresizingMaskIntoConstraints设置为的视图false需要添加到视图层次结构中。

高度约束的添加时间不得早于viewWillAppear。

我仍然Unable to simultaneously satisfy constraints在日志中看到错误,但是无论如何看来工作正常。我还仍然看到一个跳跃,在该跳跃中,高度最初设置为默认值,然后再跳跃到设置值。我还没有找到解决这些问题的方法。


import UIKit


class KeyboardViewController: UIInputViewController {


    var heightConstraint: NSLayoutConstraint!


    override func viewWillAppear(animated: Bool) {

        super.viewWillAppear(animated)

        self.inputView.addConstraint(self.heightConstraint)

    }


    override func viewDidLoad() {

        super.viewDidLoad()


        let dummyView = UILabel(frame:CGRectZero)

        dummyView.setTranslatesAutoresizingMaskIntoConstraints(false)

        self.view.addSubview(dummyView);


        let height : CGFloat = 400


        self.heightConstraint = NSLayoutConstraint( item:self.inputView, attribute:.Height, relatedBy:.Equal, toItem:nil, attribute:.NotAnAttribute, multiplier:0.0, constant:height)

    }

}

Swift 4更新:


import UIKit


class KeyboardViewController: UIInputViewController

{

    private weak var _heightConstraint: NSLayoutConstraint?


    override func viewWillAppear(_ animated: Bool)

    {

        super.viewWillAppear(animated)


        guard nil == _heightConstraint else { return }


        // We must add a subview with an `instrinsicContentSize` that uses autolayout to force the height constraint to be recognized.

        //

        let emptyView = UILabel(frame: .zero)

        emptyView.translatesAutoresizingMaskIntoConstraints = false

        view.addSubview(emptyView);


        let heightConstraint = NSLayoutConstraint(item: view,

                                                  attribute: .height,

                                                  relatedBy: .equal,

                                                  toItem: nil,

                                                  attribute: .notAnAttribute,

                                                  multiplier: 0.0,

                                                  constant: 240)

        heightConstraint.priority = .required - 1

        view.addConstraint(heightConstraint)

        _heightConstraint = heightConstraint

    }

}


查看完整回答
反对 回复 2019-10-16
  • 3 回答
  • 0 关注
  • 934 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信