我如何计算的UITableViewCell的高度与它的iOS 7的UITextView的?
我发现了很多类似的问题的答案,但sizeWithFont:
参与在每一个解决方案,这种方法已过时!
我知道我必须使用- (CGFloat)tableView:heightForRowAtIndexPath:
但我怎么计算我的TextView需要显示整个文本的高度?
我如何计算的UITableViewCell的高度与它的iOS 7的UITextView的?
我发现了很多类似的问题的答案,但sizeWithFont:
参与在每一个解决方案,这种方法已过时!
我知道我必须使用- (CGFloat)tableView:heightForRowAtIndexPath:
但我怎么计算我的TextView需要显示整个文本的高度?
首先,它是要注意非常重要的,有UITextView中和的UILabel之间有很大的区别,当涉及到文本渲染。 不仅UITextView的对所有边界插图,而且它里面的文本布局略有不同。
因此, sizeWithFont:
是一个坏的路要走UITextViews。
相反UITextView
本身具有调用函数sizeThatFits:
这将返回到显示的全部内容所需的最小尺寸UITextView
一个边框内,你可以指定。
下面将平等合作为双方的iOS 7和旧版本,并作为现在不包括任何方法,这已被弃用。
- (CGFloat)textViewHeightForAttributedText: (NSAttributedString*)text andWidth: (CGFloat)width {
UITextView *calculationView = [[UITextView alloc] init];
[calculationView setAttributedText:text];
CGSize size = [calculationView sizeThatFits:CGSizeMake(width, FLT_MAX)];
return size.height;
}
该函数将需要NSAttributedString
和所需宽度作为CGFloat
,并返回所需要的高度
因为我最近做类似的事情,我想我也会分享一些解决方案,我所遇到的相关问题。 我希望这会帮助别人。
这是更为深入,将包括以下内容:
UITableViewCell
基于以显示包含的全部内容所需要的大小UITextView
UITextView
调整大小时UITableViewCell
在编辑 如果您使用的是静态表视图中工作,或者你只有一个已知数量的UITextView
S,可以潜在地使第2步简单得多。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
// check here, if it is one of the cells, that needs to be resized
// to the size of the contained UITextView
if ( )
return [self textViewHeightForRowAtIndexPath:indexPath];
else
// return your normal height here:
return 100.0;
}
添加NSMutableDictionary
(在这个例子叫textViews
)作为一个实例变量到你UITableViewController
子类。
使用这本字典存储个别引用UITextViews
像这样:
(是的, indexPaths是有效的密钥字典 )
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
// Do you cell configuring ...
[textViews setObject:cell.textView forKey:indexPath];
[cell.textView setDelegate: self]; // Needed for step 3
return cell;
}
这个功能现在计算实际高度:
- (CGFloat)textViewHeightForRowAtIndexPath: (NSIndexPath*)indexPath {
UITextView *calculationView = [textViews objectForKey: indexPath];
CGFloat textViewWidth = calculationView.frame.size.width;
if (!calculationView.attributedText) {
// This will be needed on load, when the text view is not inited yet
calculationView = [[UITextView alloc] init];
calculationView.attributedText = // get the text from your datasource add attributes and insert here
textViewWidth = 290.0; // Insert the width of your UITextViews or include calculations to set it accordingly
}
CGSize size = [calculationView sizeThatFits:CGSizeMake(textViewWidth, FLT_MAX)];
return size.height;
}
在接下来的两个功能,这一点很重要,那的代表UITextViews
设为您UITableViewController
。 如果您需要别的东西作为委托,你可以通过从那里的相关来电或使用相应的NSNotificationCenter挂钩解决它。
- (void)textViewDidChange:(UITextView *)textView {
[self.tableView beginUpdates]; // This will cause an animated update of
[self.tableView endUpdates]; // the height of your UITableViewCell
// If the UITextView is not automatically resized (e.g. through autolayout
// constraints), resize it here
[self scrollToCursorForTextView:textView]; // OPTIONAL: Follow cursor
}
- (void)textViewDidBeginEditing:(UITextView *)textView {
[self scrollToCursorForTextView:textView];
}
这将使UITableView
滚动光标的位置,如果不是的UITableView的可见矩形内:
- (void)scrollToCursorForTextView: (UITextView*)textView {
CGRect cursorRect = [textView caretRectForPosition:textView.selectedTextRange.start];
cursorRect = [self.tableView convertRect:cursorRect fromView:textView];
if (![self rectVisible:cursorRect]) {
cursorRect.size.height += 8; // To add some space underneath the cursor
[self.tableView scrollRectToVisible:cursorRect animated:YES];
}
}
当编辑,您的部分UITableView
可以通过键盘覆盖。 如果tableviews插图不作调整, scrollToCursorForTextView:
将无法滚动到你的光标,如果它是在的tableview的底部。
- (void)keyboardWillShow:(NSNotification*)aNotification {
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
UIEdgeInsets contentInsets = UIEdgeInsetsMake(self.tableView.contentInset.top, 0.0, kbSize.height, 0.0);
self.tableView.contentInset = contentInsets;
self.tableView.scrollIndicatorInsets = contentInsets;
}
- (void)keyboardWillHide:(NSNotification*)aNotification {
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.35];
UIEdgeInsets contentInsets = UIEdgeInsetsMake(self.tableView.contentInset.top, 0.0, 0.0, 0.0);
self.tableView.contentInset = contentInsets;
self.tableView.scrollIndicatorInsets = contentInsets;
[UIView commitAnimations];
}
而最后一部分:
里面你的观点做了负荷,报名参加的通知,通过键盘改变NSNotificationCenter
:
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
}
戴维Haupert指出,我忘了包括rectVisible
功能:
- (BOOL)rectVisible: (CGRect)rect {
CGRect visibleRect;
visibleRect.origin = self.tableView.contentOffset;
visibleRect.origin.y += self.tableView.contentInset.top;
visibleRect.size = self.tableView.bounds.size;
visibleRect.size.height -= self.tableView.contentInset.top + self.tableView.contentInset.bottom;
return CGRectContainsRect(visibleRect, rect);
}
另外我注意到,那scrollToCursorForTextView:
还包括直接引用我的项目中TextField的一个。 如果你有一个问题bodyTextView
没有被发现,检查功能的更新版本。
有一个新的功能,以取代sizeWithFont,这是boundingRectWithSize。
我增加了以下功能到我的项目,它利用上iOS7的新功能和iOS比7下旧它具有基本相同的语法sizeWithFont的:
-(CGSize)text:(NSString*)text sizeWithFont:(UIFont*)font constrainedToSize:(CGSize)size{
if(IOS_NEWER_OR_EQUAL_TO_7){
NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
font, NSFontAttributeName,
nil];
CGRect frame = [text boundingRectWithSize:size
options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
attributes:attributesDictionary
context:nil];
return frame.size;
}else{
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
return [text sizeWithFont:font constrainedToSize:size];
#pragma clang diagnostic pop
}
}
您可以添加IOS_NEWER_OR_EQUAL_TO_7您prefix.pch文件在您的项目为:
#define IOS_NEWER_OR_EQUAL_TO_7 ( [ [ [ UIDevice currentDevice ] systemVersion ] floatValue ] >= 7.0 )
如果您使用UITableViewAutomaticDimension我有一个非常简单的(仅限iOS 8)解决方案。 在我的情况下,它是一个静态的表视图,但我想你可以动态原型适应这个...
我有一个文本视图的高度限制出口,我有以下方法是这样实现的:
// Outlets
@property (weak, nonatomic) IBOutlet UITextView *textView;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *textViewHeight;
// Implementation
#pragma mark - Private Methods
- (void)updateTextViewHeight {
self.textViewHeight.constant = self.textView.contentSize.height + self.textView.contentInset.top + self.textView.contentInset.bottom;
}
#pragma mark - View Controller Overrides
- (void)viewDidLoad {
[super viewDidLoad];
[self updateTextViewHeight];
}
#pragma mark - TableView Delegate & Datasource
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 80;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return UITableViewAutomaticDimension;
}
#pragma mark - TextViewDelegate
- (void)textViewDidChange:(UITextView *)textView {
[self.tableView beginUpdates];
[self updateTextViewHeight];
[self.tableView endUpdates];
}
但要记住 :文本视图必须是滚动的,你必须设置你的约束,他们为自动维工作:
最基本的细胞的例子是:
蒂姆Bodeit的答案是伟大的。 我用简单的解决方案的代码,以获得正确的文本视图的高度,并使用高度heightForRowAtIndexPath
。 但我不使用应答的休息来调整文本视图。 相反,我写的代码来改变frame
在文本视图中cellForRowAtIndexPath
。
一切工作在IOS 6及以下,但在IOS 7在文本视图的文本不能被完全示出,即使frame
文本视图的确实调整大小。 (我不使用Auto Layout
)。 它应该在的iOS 7有原因TextKit
和文本的位置由控制NSTextContainer
中UITextView
。 所以,在我的情况,我需要添加一行来设置someTextView
,以使其在iOS的7正常工作。
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) {
someTextView.textContainer.heightTracksTextView = YES;
}
由于文档说,这是什么性质的作用是:
控制接收机是否调整其边界矩形的高度时,其文本视图被调整大小。 默认值:NO。
如果使用默认值,离开它,调整后frame
的someTextView
的大小textContainer
没有改变,导致的结果是,该文本只能调整之前显示在该地区。
也许这是设置需要scrollEnabled = NO
的情况下,有不止一个textContainer
,使文本将回流从一个textContainer
到另一个。
这里是一个更解决方案,旨在简化和快速原型 :
建立:
UITextView
瓦特/其他内容。 TableCell.h
。 UITableView
与相关TableViewController.h
。 解:
(1)添加到TableViewController.m
:
// This is the method that determines the height of each cell.
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
// I am using a helper method here to get the text at a given cell.
NSString *text = [self getTextAtIndex:indexPath];
// Getting the height needed by the dynamic text view.
CGSize size = [self frameForText:text sizeWithFont:nil constrainedToSize:CGSizeMake(300.f, CGFLOAT_MAX)];
// Return the size of the current row.
// 80 is the minimum height! Update accordingly - or else, cells are going to be too thin.
return size.height + 80;
}
// Think of this as some utility function that given text, calculates how much
// space would be needed to fit that text.
- (CGSize)frameForText:(NSString *)text sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size
{
NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
font, NSFontAttributeName,
nil];
CGRect frame = [text boundingRectWithSize:size
options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
attributes:attributesDictionary
context:nil];
// This contains both height and width, but we really care about height.
return frame.size;
}
// Think of this as a source for the text to be rendered in the text view.
// I used a dictionary to map indexPath to some dynamically fetched text.
- (NSString *) getTextAtIndex: (NSIndexPath *) indexPath
{
return @"This is stubbed text - update it to return the text of the text view.";
}
(2)添加到TableCell.m
:
// This method will be called when the cell is initialized from the storyboard
// prototype.
- (void)awakeFromNib
{
// Assuming TextView here is the text view in the cell.
TextView.scrollEnabled = YES;
}
说明:
因此,这里发生了什么是这样的:每个文本视图绑定到由垂直和水平的限制表单元格的高度 - 这意味着当表格单元格高度增加,文中观点增加其大小为好。 我用的@ manecosta的代码修改后的版本来计算文本视图所需要的高度,以适应单元格中的给定文本。 因此,这意味着给出字符的X个文本, frameForText:
将返回其尺寸将有一个属性size.height
相匹配的文本视图的要求的高度。
现在,剩下的工作就是更新单元格的高度符合该要求的文本视图的高度。 而这种情况下实现heightForRowAtIndexPath:
正如在评论中指出,由于size.height
只对文本视图的高度,而不是整个小区,应该有一定的偏移量添加到它。 在该示例的情况下,此值是80。
如果你使用的自动布局的一种方法是让自动版式引擎计算大小为您服务。 这是不是最有效的方法,但它是非常方便(可以说是最准确)。 它随着该小区布局的复杂性变得更方便 - 例如,你突然有两个或两个以上textviews /字段中的单元格。
我回答过类似的问题与使用自动布局,这里大小的tableview细胞完整的示例:
如何调整上海华以适应自动布局所有子视图?
完整的平滑方案如下。
首先,我们需要的细胞类一个TextView
@protocol TextInputTableViewCellDelegate <NSObject>
@optional
- (void)textInputTableViewCellTextWillChange:(TextInputTableViewCell *)cell;
- (void)textInputTableViewCellTextDidChange:(TextInputTableViewCell *)cell;
@end
@interface TextInputTableViewCell : UITableViewCell
@property (nonatomic, weak) id<TextInputTableViewCellDelegate> delegate;
@property (nonatomic, readonly) UITextView *textView;
@property (nonatomic) NSInteger minLines;
@property (nonatomic) CGFloat lastRelativeFrameOriginY;
@end
#import "TextInputTableViewCell.h"
@interface TextInputTableViewCell () <UITextViewDelegate> {
NSLayoutConstraint *_heightConstraint;
}
@property (nonatomic) UITextView *textView;
@end
@implementation TextInputTableViewCell
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
self.selectionStyle = UITableViewCellSelectionStyleNone;
_textView = [UITextView new];
_textView.translatesAutoresizingMaskIntoConstraints = NO;
_textView.delegate = self;
_textView.scrollEnabled = NO;
_textView.font = CELL_REG_FONT;
_textView.textContainer.lineFragmentPadding = 0.0;
_textView.textContainerInset = UIEdgeInsetsZero;
[self.contentView addSubview:_textView];
[self.contentView addConstraints: [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[view]-|" options:nil metrics:nil views:@{@"view": _textView}]];
[self.contentView addConstraints: [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[view]-|" options:nil metrics:nil views:@{@"view": _textView}]];
_heightConstraint = [NSLayoutConstraint constraintWithItem: _textView
attribute: NSLayoutAttributeHeight
relatedBy: NSLayoutRelationGreaterThanOrEqual
toItem: nil
attribute: NSLayoutAttributeNotAnAttribute
multiplier: 0.0
constant: (_textView.font.lineHeight + 15)];
_heightConstraint.priority = UILayoutPriorityRequired - 1;
[_textView addConstraint:_heightConstraint];
}
return self;
}
- (void)prepareForReuse {
[super prepareForReuse];
self.minLines = 1;
}
- (void)setMinLines:(NSInteger)minLines {
_heightConstraint.constant = minLines * _textView.font.lineHeight + 15;
}
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
if ([self.delegate respondsToSelector:@selector(textInputTableViewCellTextWillChange:)]) {
[self.delegate textInputTableViewCellTextWillChange:self];
}
return YES;
}
- (void)textViewDidChange:(UITextView *)textView {
if ([self.delegate respondsToSelector:@selector(textInputTableViewCellTextDidChange:)]) {
[self.delegate textInputTableViewCellTextDidChange:self];
}
}
接下来,我们用它在TableViewController
@interface SomeTableViewController () <TextInputTableViewCellDelegate>
@end
@implementation SomeTableViewController
. . . . . . . . . . . . . . . . . . . .
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
TextInputTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: TextInputTableViewCellIdentifier forIndexPath:indexPath];
cell.delegate = self;
cell.minLines = 3;
. . . . . . . . . .
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
return UITableViewAutomaticDimension;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return UITableViewAutomaticDimension;
}
- (void)textInputTableViewCellWillChange:(TextInputTableViewCell *)cell {
cell.lastRelativeFrameOriginY = cell.frame.origin.y - self.tableView.contentOffset.y;
}
- (void)textInputTableViewCellTextDidChange:(TextInputTableViewCell *)cell {
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
[UIView performWithoutAnimation:^{
[self.tableView moveRowAtIndexPath:indexPath toIndexPath:indexPath];
}];
CGFloat contentOffsetY = cell.frame.origin.y - cell.lastRelativeFrameOriginY;
self.tableView.contentOffset = CGPointMake(self.tableView.contentOffset.x, contentOffsetY);
CGRect caretRect = [cell.textView caretRectForPosition:cell.textView.selectedTextRange.start];
caretRect = [self.tableView convertRect:caretRect fromView:cell.textView];
CGRect visibleRect = self.tableView.bounds;
visibleRect.origin.y += self.tableView.contentInset.top;
visibleRect.size.height -= self.tableView.contentInset.top + self.tableView.contentInset.bottom;
BOOL res = CGRectContainsRect(visibleRect, caretRect);
if (!res) {
caretRect.size.height += 5;
[self.tableView scrollRectToVisible:caretRect animated:NO];
}
}
@end
这里minLines
允许设置为TextView的最小高度(以抵抗高度由自动版式与UITableViewAutomaticDimension最小化)。
moveRowAtIndexPath:indexPath:
用相同indexPath开始tableViewCell高度重新计算和重新布局。
performWithoutAnimation:
将删除的副作用(的tableView内容偏移跳跃开始打字时新行)。
重要的是要保持relativeFrameOriginY
(不contentOffsetY
因为小区更新过程!) contentSize
当前单元格前的细胞可能是意想不到的方式通过的autoLayout微积分的变化。 打字时长的话它会删除系统上的视觉断字跳跃。
请注意,你不应该设置该属性 estimatedRowHeight
! 以下不工作
self.tableView.estimatedRowHeight = UITableViewAutomaticDimension;
仅使用tableViewDelegate方法。
================================================== ========================
如果不介意反对的tableView和tableViewCell和从的tableView的tableViewCell更新几何形状之间的弱结合,就可以升级TextInputTableViewCell
上面的类:
@interface TextInputTableViewCell : UITableViewCell
@property (nonatomic, weak) id<TextInputTableViewCellDelegate> delegate;
@property (nonatomic, weak) UITableView *tableView;
@property (nonatomic, readonly) UITextView *textView;
@property (nonatomic) NSInteger minLines;
@end
#import "TextInputTableViewCell.h"
@interface TextInputTableViewCell () <UITextViewDelegate> {
NSLayoutConstraint *_heightConstraint;
CGFloat _lastRelativeFrameOriginY;
}
@property (nonatomic) UITextView *textView;
@end
@implementation TextInputTableViewCell
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
self.selectionStyle = UITableViewCellSelectionStyleNone;
_textView = [UITextView new];
_textView.translatesAutoresizingMaskIntoConstraints = NO;
_textView.delegate = self;
_textView.scrollEnabled = NO;
_textView.font = CELL_REG_FONT;
_textView.textContainer.lineFragmentPadding = 0.0;
_textView.textContainerInset = UIEdgeInsetsZero;
[self.contentView addSubview:_textView];
[self.contentView addConstraints: [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[view]-|" options:nil metrics:nil views:@{@"view": _textView}]];
[self.contentView addConstraints: [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[view]-|" options:nil metrics:nil views:@{@"view": _textView}]];
_heightConstraint = [NSLayoutConstraint constraintWithItem: _textView
attribute: NSLayoutAttributeHeight
relatedBy: NSLayoutRelationGreaterThanOrEqual
toItem: nil
attribute: NSLayoutAttributeNotAnAttribute
multiplier: 0.0
constant: (_textView.font.lineHeight + 15)];
_heightConstraint.priority = UILayoutPriorityRequired - 1;
[_textView addConstraint:_heightConstraint];
}
return self;
}
- (void)prepareForReuse {
[super prepareForReuse];
self.minLines = 1;
self.tableView = nil;
}
- (void)setMinLines:(NSInteger)minLines {
_heightConstraint.constant = minLines * _textView.font.lineHeight + 15;
}
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
_lastRelativeFrameOriginY = self.frame.origin.y - self.tableView.contentOffset.y;
return YES;
}
- (void)textViewDidChange:(UITextView *)textView {
NSIndexPath *indexPath = [self.tableView indexPathForCell:self];
if (indexPath == nil) return;
[UIView performWithoutAnimation:^{
[self.tableView moveRowAtIndexPath:indexPath toIndexPath:indexPath];
}];
CGFloat contentOffsetY = self.frame.origin.y - _lastRelativeFrameOriginY;
self.tableView.contentOffset = CGPointMake(self.tableView.contentOffset.x, contentOffsetY);
CGRect caretRect = [self.textView caretRectForPosition:self.textView.selectedTextRange.start];
caretRect = [self.tableView convertRect:caretRect fromView:self.textView];
CGRect visibleRect = self.tableView.bounds;
visibleRect.origin.y += self.tableView.contentInset.top;
visibleRect.size.height -= self.tableView.contentInset.top + self.tableView.contentInset.bottom;
BOOL res = CGRectContainsRect(visibleRect, caretRect);
if (!res) {
caretRect.size.height += 5;
[self.tableView scrollRectToVisible:caretRect animated:NO];
}
}
@end
您单元的高度将通过UILabel的含量计算,但所有文字都会由TextField显示。
UITextView *txtDescLandscape=[[UITextView alloc] initWithFrame:CGRectMake(2,20,310,2)];
txtDescLandscape.editable =NO;
txtDescLandscape.textAlignment =UITextAlignmentLeft;
[txtDescLandscape setFont:[UIFont fontWithName:@"ArialMT" size:15]];
txtDescLandscape.text =[objImage valueForKey:@"imgdescription"];
txtDescLandscape.text =[txtDescLandscape.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
[txtDescLandscape sizeToFit];
[headerView addSubview:txtDescLandscape];
CGRect txtViewlandscpframe = txtDescLandscape.frame;
txtViewlandscpframe.size.height = txtDescLandscape.contentSize.height;
txtDescLandscape.frame = txtViewlandscpframe;
我觉得这种方式,你可以指望你的文本视图的高度,然后调整根据这样的高度你的tableview单元格,这样您就可以在小区全文
斯威夫特版本
func textViewHeightForAttributedText(text: NSAttributedString, andWidth width: CGFloat) -> CGFloat {
let calculationView = UITextView()
calculationView.attributedText = text
let size = calculationView.sizeThatFits(CGSize(width: width, height: CGFloat.max))
return size.height
}
如果你想自动调整UITableViewCell
“基于内部的高度身高UITextView
的高度。 看到这里我的答案: https://stackoverflow.com/a/45890087/1245231
解决的办法很简单,应该工作,因为iOS的7,确保Scrolling Enabled
选项关闭了UITextView
里面UITableViewCell
在故事板。
然后在您的UITableViewController的viewDidLoad()中设置的tableView.rowHeight = UITableViewAutomaticDimension
和tableView.estimatedRowHeight > 0
,例如:
override func viewDidLoad() {
super.viewDidLoad()
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 44.0
}
而已。 UITableViewCell
的高度将基于内自动地调整UITextView
身高'。
对于iOS 8.0及以上,你可以只使用
your_tablview.estimatedrowheight= minheight
你想
your_tableview.rowheight=UItableviewautomaticDimension