如何在表格视图单元格内的TextView中使用动态类型

时间:2019-04-18 06:09:53

标签: ios swift accessibility

我想在我的应用程序中实现动态类型,因此该应用程序可以适应用户字体首选项。我有一个带有3个静态单元格的表格视图。第一个和第二个具有UITextField,它们工作正常,没有任何问题。第三个是具有UITextView的单元格不会缩放。 “动态类型”设置为“开”,字体为“正文”。

这是我的UITableViewController中的代码。

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.rowHeight = UITableView.automaticDimension
    tableView.estimatedRowHeight = 100 
    setupTextFieldsAndTextView()
}

func setupTextFieldsAndTextView() {
    emailTF.keyboardType = UIKeyboardType.asciiCapable
    titleTF.keyboardType = UIKeyboardType.asciiCapable
    messageTextView.keyboardType = UIKeyboardType.asciiCapable

    emailTF.returnKeyType = .next
    titleTF.returnKeyType = .next
    messageTextView.returnKeyType = .default

    emailTF.delegate = self
    titleTF.delegate = self
    messageTextView.delegate = self
}

UITableView代表

 override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableView.automaticDimension
}

我希望具有与iOS日历应用程序相同的设计。基于所选字体类型但UITextView仍然可以滚动的单元格比例,并且用户也可以选择其中的文本。屏幕中的UITextView是带有文本占位符“ Notes”的单元格。 ios calendar 1

ios calendar 2

3 个答案:

答案 0 :(得分:0)

为UITextView使用GrowingTextView

答案 1 :(得分:0)

需要检查UITextView的几个步骤:

  • 它必须在您的牢房内。
  • 必须在单元格中设置其约束。
  • 如果要使用动态类型功能,则必须选择其文字样式必须
  • 如果要使用动态类型功能,请在接口生成器中勾选
  • 它的Automatically Adjusts Font属性必须
  • 在“属性”检查器的“滚动视图”部分中关闭Scrolling Enabled属性。

选中所有这些元素后,单元格高度和UITextView字体大小应适应所需的大小

我建议您观看WWDC 2017视频中的这段detailed summary,该视频完美地说明了如何使用动态类型构建应用。

答案 2 :(得分:0)

请检查此值以获取tableView中textView的动态高度。

// Tableview Delegate Method
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "NotesCell", for: indexPath) as! NotesCell

    cell.txtViewNotes.tag = indexPath.row
    cell.txtViewNotes.delegate = self

    return cell;
}

// Textview Delegate Method
func textViewDidChange(_ textView: UITextView) {
        adjustFrames(textView)
}

// Custom Method    
func adjustFrames(_ textView: UITextView)  {
    let indexPath = IndexPath(row: textView.tag, section: 0)
    let cell = yourTableView.cellForRow(at: indexPath) as! NotesCell

    UIView.setAnimationsEnabled(false);

    self.yourTableView.beginUpdates()
        cell.constNoteHeight.constant = textView.contentSize.height
        textView.beginFloatingCursor(at: CGPoint.zero)
        textView.endFloatingCursor()
    self.yourTableView.endUpdates()

    UIView.setAnimationsEnabled(true);

}
  

注意: constNoteHeight 是textView的高度常数。