Dav*_*eek 11 uitableview ios swift
我正在使用以下代码使UITableViewCell具有动态高度:
tableView.estimatedRowHeight = 155
tableView.rowHeight = UITableViewAutomaticDimension
Run Code Online (Sandbox Code Playgroud)
这段代码让UITextView根据内容改变它的高度.
extension NewUserTweetTableVC: UITextViewDelegate {
func textViewDidChange(textView: UITextView) {
let fixedWidth = textView.frame.size.width
textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max))
let newSize = textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max))
var newFrame = textView.frame
newFrame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height)
textView.frame = newFrame
}
}
Run Code Online (Sandbox Code Playgroud)
一旦我在运行时更改了UITextView的文本,UITextView的高度就会改变,但UITableViewCell的高度却没有.我怎么能改变呢?非常感谢帮助.
Rah*_*ani 23
以编程方式获取textview的高度...
let textView = UITextView()//your Text view
let sizeThatShouldFitTheContent = textView.sizeThatFits(textView.frame.size)
let height = sizeThatShouldFitTheContent.height
Run Code Online (Sandbox Code Playgroud)
或试试这个演示......
在UITableView中自定义UITextView
https://damienpontifex.com/2014/10/01/self-sizing-uitableviewcell-with-uitextview-in-ios8/
Lio*_*ion 11
如果要使用,UITableViewAutomaticDimension则必须从上到下设置串行约束。没有自动布局或适当的约束UITableViewAutomaticDimension将不起作用。因此,您可以管理以下内容:对的set top,bottom,leading,trailing and fixed height约束textview。然后fixed height constraint增加它的出口,而constant不是改变或设置textview的框架,我想一切都可以!
iOS*_*fee 10
Step 1, 禁用TextView的滚动
Step 2, 添加Top, Left, Right, bottom约束
Step 3, Delegate设置为textView
Step 4, 下面实现UITextViewDelegate方法
- (void)textViewDidChange:(UITextView *)textView {
[UIView setAnimationsEnabled:false];
[textView sizeToFit];
[self.tableView beginUpdates];
[self.tableView endUpdates];
[UIView setAnimationsEnabled:true];}
Run Code Online (Sandbox Code Playgroud)
我正在改进狮子的答案。
如果你使用 UITableViewAutomaticDimension 那么你必须从上到下设置串行约束。如果没有自动布局或适当的约束, UITableViewAutomaticDimension 将无法工作。所以你可以像这样管理这个东西:为你的文本视图设置顶部、底部、前导、尾随和固定高度约束。禁用 UITextview 的滚动功能就大功告成了。您不需要固定高度约束。
更新 Swift 4.2 中的代码
Credit: http://www.swiftdevcenter.com/the-dynamic-height-of-uitextview-inside-uitableviewcell-swift/
创建一个名为 GrowingCell 的自定义单元格,在单元格中添加 UITextView 并创建一个 Outlet这个的。在 ViewController 类的 UITableView 中注册此单元格。你的视图控制器:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let nib = UINib(nibName: "GrowingCell", bundle: nil)
self.tableView.register(nib, forCellReuseIdentifier: "GrowingCell")
self.tableView.tableFooterView = UIView()
self.tableView.dataSource = self
}
}
extension ViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableView.automaticDimension
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "GrowingCell", for: indexPath) as! GrowingCell
cell.cellDelegate = self
return cell
}
}
extension ViewController: GrowingCellProtocol {
// Update height of UITextView based on string height
func updateHeightOfRow(_ cell: GrowingCell, _ textView: UITextView) {
let size = textView.bounds.size
let newSize = tableView.sizeThatFits(CGSize(width: size.width,
height: CGFloat.greatestFiniteMagnitude))
if size.height != newSize.height {
UIView.setAnimationsEnabled(false)
tableView?.beginUpdates()
tableView?.endUpdates()
UIView.setAnimationsEnabled(true)
// Scoll up your textview if required
if let thisIndexPath = tableView.indexPath(for: cell) {
tableView.scrollToRow(at: thisIndexPath, at: .bottom, animated: false)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在移动到您的 Custom GrowingCell 单元并添加以下代码:
import UIKit
protocol GrowingCellProtocol: class {
func updateHeightOfRow(_ cell: GrowingCell, _ textView: UITextView)
}
class GrowingCell: UITableViewCell {
weak var cellDelegate: GrowingCellProtocol?
@IBOutlet weak var textView: UITextView!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
textView.delegate = self
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
extension GrowingCell: UITextViewDelegate {
func textViewDidChange(_ textView: UITextView) {
if let deletate = cellDelegate {
deletate.updateHeightOfRow(self, textView)
}
}
}
Run Code Online (Sandbox Code Playgroud)
欲了解更多详细信息:请访问完整的演示
| 归档时间: |
|
| 查看次数: |
13846 次 |
| 最近记录: |