0

3 つの textfield/textview フィールドを含むビューがあり、キーボードが表示されたときにビューをスクロール可能にするために、すべての要素を scrollview 内に配置しました。要素は以前はフレームの外になかったので、contentSize は全画面サイズと同じサイズである必要があり、キーボードが表示されたときに、スクロールビューの下部の制約をビューの下部から -keyboardHeight に更新します。そして、キーボードの上でスクロール可能です..

これはすべて正常に機能します。問題は、スクロールビューの下部にボタンを追加して、ビューの両側と下部に先行/後続することです。

写真を見る:

ボタンがナビゲーション バーの後ろに隠れている現在のビュー

ボタンを配置したい場所。右.左.下に約 20 の余白

SnapKit を使用して制約を設定しています。ボタンについては、次のようにしたいと思います。

    sharebutton.snp.makeConstraints { (make) in
        make.width.left.right.equalToSuperview()
        make.bottom.equalToSuperview().offset(-20)
    }

(Superview/scrollview は既に横から 20 マージンとして設定されています)

//編集: コードが追加されました ->

override func viewDidLayoutSubviews() {
    scrollview.contentSize = CGSize(width: centerView.frame.width,      height: view.frame.height)
}

override func viewDidLoad() {
    super.viewDidLoad()

    self.title = "title"
    view.backgroundColor = .white

    view.addSubview(scrollview)

    scrollview.addSubview(sharebutton)
    scrollview.addSubview(subjectField)
    scrollview.addSubview(messageField)
    scrollview.addSubview(datepicker)
    scrollview.addSubview(addressTable)
    addressTable.dataSource = self
    addressTable.delegate = self
    addressTable.separatorStyle = .none
    addressTable.keyboardDismissMode = .onDrag
    addressTable.separatorStyle = .singleLineEtched

    subjectField.placeholder = "content"
    datepicker.setTitle("topbutton", for: .normal)
    datepicker.setTitleColor(.black, for: .normal)
    datepicker.setTitleColor(UIColor.ME.border, for: .highlighted)
    datepicker.titleLabel?.font = UIFont.ME.button
    datepicker.layer.borderWidth = 1
    datepicker.layer.cornerRadius = 3
    datepicker.layer.borderColor = UIColor.ME.border.cgColor
    datepicker.addTarget(self, action: #selector(showDates), for: .touchUpInside)

    sharebutton.setTitle("Share", for: .normal)
    sharebutton.backgroundColor = UIColor.ME.buttonMainBlue
    sharebutton.addTarget(self, action: #selector(shareClicked), for: .touchUpInside)

    scrollview.backgroundColor = .red
    scrollview.snp.makeConstraints { (make) in
        make.top.bottom.equalToSuperview()
        make.left.width.right.equalTo(centerView)
    }

    datepicker.snp.makeConstraints { (make) in
        make.top.equalToSuperview().offset(paddingGlobal)
        make.left.width.right.equalToSuperview()
        make.height.equalTo(50)
    }

    addressTable.snp.makeConstraints { (make) in
        make.top.equalTo(datepicker.snp.bottom)
        make.left.right.equalTo(datepicker)
        make.height.equalTo(200)
    }

    subjectField.snp.makeConstraints { (make) in
        make.top.equalTo(datepicker.snp.bottom).offset(20)
        make.left.right.equalToSuperview()
    }

    messageField.snp.makeConstraints { (make) in
        make.top.equalTo(subjectField.snp.bottom).offset(20)
        make.height.equalTo(200)
        make.left.right.equalToSuperview()
    }

    sharebutton.snp.makeConstraints { (make) in
        make.width.left.right.equalToSuperview()
        make.bottom.equalToSuperview().offset(-20)
    }
}

何かご意見は ?

4

3 に答える 3

1

UIView最初にサブビュー内に(たとえば、containerViewという名前scrollViewを付けます)を追加してから、すべてのuielement(例:textfield/textview、UIButton)をそのcontainerViewのsubViewに追加する必要があります。

于 2018-06-22T14:08:46.980 に答える