Ios 如何在表视图单元格内的TextView中使用动态类型
我想在我的应用程序中实现动态类型,这样应用程序就可以适应用户的字体偏好。我有一个带有3个静态单元格的表视图。第一个和第二个具有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
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。请检查我的屏幕: