【问题标题】:How to stop a uitextview from covering uitableviewcell?如何阻止 uitextview 覆盖 uitableviewcell?
【发布时间】:2014-11-22 13:18:40
【问题描述】:

所以我在 tableview 中的 UITableViewCell 上有一个 UIView。我相信这个 UIView 将是这个表的 headerView。

在这个 headerView 中,我有一个 UITextview 并将其固有大小设置为占位符,以便它可以随其内容增长。出于同样的原因,我还将 headerView 的固有大小设置为占位符。现在面临的问题是,当 UITextView 变大时,它开始隐藏 tableview 单元格。

【问题讨论】:

  • 你在做什么来增加文本视图的大小?您是否已将其设置为在您键入时自动增长,或者您是否在代码中“手动”增加它?它是非滚动的吗?
  • 是的,正如我上面提到的(我有一个 UITextview 并将其固有大小设置为占位符,以便它可以随其内容增长。)因此它会根据其内容自动增长。
  • 像您在问题中所说的那样设置后,当我输入文本视图时,我的文本视图无法增长。你有滚动关闭吗?你给它的superview设置了什么限制?除了将其固有内容大小设置为占位符之外,您是否对超级视图进行了任何操作?
  • 我只是用它来显示文本,所以我起飞了(可编辑、可选择和启用滚动)。它对超级视图没有任何限制。它的约束是它上面的对象,比如[导致 img] [顶部空间到盔甲][尾随到 img]。我没有对 superView 做任何事情。如果我的做法是错误的,那么正确的做法可能是什么!
  • 我不确定如何解决它,这就是我试图重现该问题的原因。我在展开标题视图时所做的一件事是在展开后将视图重置为表的标题(self.tableView.tableHeaderView = myHeaderView)。因此,您可以在设置文本视图的文本后尝试该行。

标签: ios objective-c iphone uitableview


【解决方案1】:

您需要计算文本视图的大小并将其返回到intrinsicContentSize 的覆盖中,然后使用systemLayoutSizeFittingSize: 来调整标题视图的大小。文本视图需要固定到单元格的顶部和底部(如果您在文本视图上方有视图,则可以将其固定到那些视图上,但是这些视图需要固定到单元格的顶部)。在我的测试应用程序中,我没有对 IB 中的 Intrinsic Size 设置做任何事情,我将其保留为系统定义。我对文本视图进行了子类化并添加了这段代码,

-(CGSize)intrinsicContentSize {
    CGRect textRect = [self.text boundingRectWithSize:CGSizeMake(self.frame.size.width, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:self.font} context:nil];
    return CGSizeMake(textRect.size.width, textRect.size.height + self.textContainerInset.top + self.textContainerInset.bottom);
}

在表格视图控制器中,当我设置新文本时,我做了以下操作来查看标题展开,

- (void)viewDidLoad {
    [super viewDidLoad];
    self.theData = @[@"One",@"Two",@"Three",@"Four",@"Five",@"Six",@"Seven",@"Eight",@"Nine",@"Black",@"Brown",@"Red",@"Orange",@"Yellow",@"Green",@"Blue",@"Violet",@"Gray",@"White"];
    self.tableView.tableHeaderView = self.header;
    [self.tableView reloadData];
    [self performSelector:@selector(doStuff) withObject:nil afterDelay:3];
}


-(void)doStuff {
    self.tv.text = @"Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. jfhk gdkj gkf fjkd jkgjhjh khj khkjhk kjh jkhjkh kjhkjhkjh  The quick red fox jumped over the lazy brown dog. The end";
    CGSize headerSize = [self.header systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
    self.header.frame = CGRectMake(0, 0, headerSize.width, headerSize.height);
    self.tableView.tableHeaderView = self.header;
}

当我最初在 IB 中设置约束时,系统给了我一个警告,并提出了一些更改建议——我只需将垂直内容压缩阻力优先级更改为 749(从 750)。我在这里上传了一个测试应用,http://jmp.sh/fLZv7XK

【讨论】:

    猜你喜欢
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多