Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在表视图单元格内的TextView中使用动态类型_Ios_Swift_Accessibility_Dynamic Type Feature - Fatal编程技术网

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

Ios 如何在表视图单元格内的TextView中使用动态类型,ios,swift,accessibility,dynamic-type-feature,Ios,Swift,Accessibility,Dynamic Type Feature,我想在我的应用程序中实现动态类型,这样应用程序就可以适应用户的字体偏好。我有一个带有3个静态单元格的表视图。第一个和第二个具有UITextField,它们工作正常,没有任何问题。第三个是带有UITextView的单元格,不可缩放。动态类型设置为on,字体为Body 这是我的UITableViewController中的代码 override func viewDidLoad() { super.viewDidLoad() tableView.rowHeight = UITabl

我想在我的应用程序中实现动态类型,这样应用程序就可以适应用户的字体偏好。我有一个带有3个静态单元格的表视图。第一个和第二个具有
UITextField
,它们工作正常,没有任何问题。第三个是带有
UITextView
的单元格,不可缩放。动态类型设置为on,字体为Body

这是我的
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
delegate

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

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


对于UITextView,使用以下步骤检查
UITextView

  • 它一定在你的牢房里
  • 必须使用单元格设置其约束
  • 如果要使用动态类型功能,必须选择其文本样式
  • 如果要使用动态类型功能,必须在界面生成器中勾选其
    自动调整字体
    属性
  • 在“属性检查器”的“滚动视图”部分中,关闭“已启用滚动的<代码>属性”
选中所有这些元素后,单元格高度和
UITextView
字体大小应与所需大小相适应


我建议您看看这段WWDC 2017视频,它完美地解释了如何使用动态类型构建应用程序。

请检查这段视频,查看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);

}
注意:constnotehight是textView的高度常量


@ShadeToD:当你声称UITextView的单元格不能按动态类型缩放时,你是在谈论高度还是字体大小?@XLE_22我指的是单元格的高度和单元格内文本的字体。从iOS日历应用程序中查看2张照片。它可以缩放单元格高度,也可以缩放单元格内的文本。(带有占位符“Notes”的单元格)您可以尝试您的textview单元格收听
UIContentSizeCategory.didChangeNotification
,然后刷新您的textview?我希望使用与iOS日历应用程序相同的设计。在该应用程序中,单元格内的textview在您键入文本时不会增长。Hello@ShadeToD,我遇到了相同的问题,所以我在单元格内使用GrowingTextview。请检查我的屏幕: