PrototypeCell内部的UITextView在两个iPhone模拟器中具有不同的行为

时间:2018-10-18 16:58:50

标签: ios swift xcode uitableview autolayout

我有一个UITableView,其中有两个单元用于用户放置信息。

第一个单元格:两个按钮以“取消”和“完成”。 第二个单元格:UITextView用于输入用户类型信息。

这在iPhone 7、6s ...上工作正常,但是在iPhone SE和5C上,屏幕不同。我使用了自动布局,并且在情节提要中似乎可以正常工作。 详细信息:我需要将Height Constraint设置为TextView才能起作用。

差异可以在下图看到:

enter image description here

故事板:

enter image description here

TableView的约束:

enter image description here

ViewController:

class LiberarViewController : UIViewController, UITableViewDelegate, UITableViewDataSource, UITextViewDelegate {

    @IBOutlet weak var tableViewForm: UITableView!

    var callback : ((String)-> ())?

    override func viewDidLoad() {
        tableViewForm.dataSource = self
        tableViewForm.delegate = self
//        tableViewForm.tableFooterView = UIView()        
    }

    @objc func cancelar(_ sender: Any) {
        self.dismiss(animated: true, completion: {})
    }

    @objc func finalizar(_ sender: Any) {
        self.dismiss(animated: true, completion: {})
    }

    func textViewDidEndEditing(_ textView: UITextView) {
        print("End edigint: \(textView.text!)")
    }

    func numberOfSections(in tableView: UITableView) -> Int {
        return 2
    }

    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        if section == 1 {
            return "Digite a justificativa: "
        }
        return nil
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        switch indexPath.section {
            case 0:
            let cell = tableView.dequeueReusableCell(withIdentifier: "CellBotoesLiberar") as! CellBotoesLiberar
            cell.selectionStyle = .none
            cell.btCancelar.addTarget(self, action: #selector(cancelar), for: .touchUpInside)
            cell.btFinalizar.addTarget(self, action: #selector(finalizar), for: .touchUpInside)
            return cell

        case 1:
            let cell = tableView.dequeueReusableCell(withIdentifier: "CellJustificativaLiberar") as! CellJustificativaLiberar
            cell.txtViewJustificativa.delegate = self
            return cell

            default: return UITableViewCell()
        }
    }
}

class CellJustificativaLiberar : UITableViewCell {
    @IBOutlet weak var txtViewJustificativa: UITextView!
}

class CellBotoesLiberar : UITableViewCell {
    @IBOutlet weak var btFinalizar: UIButton!
    @IBOutlet weak var btCancelar: UIButton!
}

1 个答案:

答案 0 :(得分:1)

您的TableView对“安全区域”的最大限制正在引起问题。添加以下约束:

  1. 水平和垂直居中以进行预览。
  2. 固定高度和固定宽度/引导和拖移至Superview。

希望这对您有用。

enter image description here

enter image description here