我有一个包含 3 个标签、一个按钮和一个 UITextView 的自定义表格单元格。
UITextView 的文本仅在运行时已知,因为它是我从服务器提取的数据。
我正在尝试根据我放入 UITextView 中的文本将 UITextView 和自定义表格单元格的大小调整到正确的高度。
UITextView 的文本在 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 方法中设置。
在这里,我尝试使用以下方法调整 UITextView (bodyTextView) 的大小。
CGSize stringSize = [cell.bodyTextView.text sizeWithFont:cell.bodyTextView.font constrainedToSize:CGSizeMake(cell.bodyTextView.bounds.size.width, 9999) lineBreakMode:NSLineBreakByWordWrapping];
[cell.bodyTextView setText:threadMessage.body];
CGRect bodyFrame = cell.bodyTextView.frame;
bodyFrame.size = cell.bodyTextView.contentSize;
[cell.bodyTextView setFrame:bodyFrame];
这或多或少似乎工作正常,因为我的 UIButton 没有向下移动到它应该的位置,即使它对我的 UITextView 的底部有一个“顶部空间到”约束。我本以为它会自动移动。但是我可以通过编程将其移动到适当的位置,所以没什么大不了的。
下一段代码确实将 tableViewCell 的大小调整为适合标签和 UITextView 的高度,但底部的按钮没有足够的空间。 接下来我计算单元格的高度并使用以下命令返回它...
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath: (NSIndexPath *)indexPath
{
CGSize stringSize = [threadMessage.body sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake(280, 9999) lineBreakMode:NSLineBreakByWordWrapping];
float oldHeight = 28;
float newHeight = stringSize.height;
return tableView.rowHeight - oldHeight + newHeight;
}
如您所见,我在 UITextView 高度和新高度之间做了一个高度差。我试图以编程方式获取 oldHeight,但我得到了数以千计的疯狂值。
最大的问题是,当 View 首次显示时,行的大小或多或少是正确的。但是 UITextView 没有调整大小。如果我滚动将其移出屏幕然后将其滚动回来,则 UITextView 的大小合适。但是话又说回来,如果我将它滚动并返回到屏幕上,它会再次调整自己的大小为一行。
我觉得我遇到了先有鸡还是先有蛋的问题,无法解决这个问题。
我希望弄清楚的两个主要问题是:
2 ) 如何让我的自定义 TableCellView 适当调整大小以包含按钮的高度?
我希望这一切都有意义,并且我已经提供了足够的细节。如有任何问题,请告诉我。
如有任何建议,我们将不胜感激。谢谢!
问候,
彼得
最佳答案
好吧,我终于弄清楚了问题所在。我想我会发布我的解决方案以防其他人遇到这个问题,因为今天这让我的大脑扭曲了好几个小时。
我认为这个问题可能与我使用 iOS 6 SDK 的项目有关。我下载了 iOS 5 模拟器并尝试在其上运行我的应用程序。启动后立即出现错误。 NSLayoutInconsitencyException(或类似的东西)。在网上搜索了一番之后,我发现 iOS 5 与 iOS 6 的设置不兼容。
此设置是“用户自动布局”,并且已在我的 Storyboard 文件中进行了检查。要找到它,请选择您的 Storyboard文件,然后选择右侧的文件检查器 (Command-Option-1)。在 Interface Builder Document 部分下,您将看到“Use Autolayout”复选框。取消选中此项,事情开始变得更好。每次我在屏幕上和屏幕外滚动单元格时,我的 UITextView 不再被调整为一行并恢复到完整长度。
但是我仍然遇到单元格高度不正确的问题。现在我已经解决了 Autolayout 问题,事实证明这非常简单(你不会相信我到处都有所有注释掉的试错测试代码 :))。
在 cellforRowAtIndexPath 函数中,您需要将 UITextView 的文本设置为您想要的任何内容,然后简单地获取它的 contentSize,然后调整 UITextView 框架的大小...
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
MyCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyCellIdentifier"];
[cell.bodyTextView setText:myText];
CGRect bodyFrame = cell.bodyTextView.frame;
bodyFrame.size = cell.bodyTextView.contentSize;
[cell.bodyTextView setFrame:bodyFrame];
... Whatever else you need to do here ...
}
然后在 heightForRowAtIndexPath 中我发现再次获取单元格并设置文本我能够获得正确的大小差异并因此返回正确的大小。通过使用大小差异,它允许您在表格单元格中包含任何其他 UI 元素。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
MyCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyCellIdentifier"];
float oldHeight = cell.bodyTextView.frame.size.height;
cell.bodyTextView.text = threadMessage.body;
CGRect bodyFrame = cell.bodyTextView.frame;
bodyFrame.size = cell.bodyTextView.contentSize;
float newHeight = cell.bodyTextView.contentSize.height;
return tableView.rowHeight - oldHeight + newHeight;
}
我希望这对将来的人有所帮助。如果其中任何一个没有意义,请随时问我任何问题。感谢 Mohit 试图帮助我。非常感谢。
关于ios - 在该单元格中调整自定义 UITableViewCell 高度和 UITextView 的高度(存在其他 UI 元素),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13523742/
我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些
有这些railscast。http://railscasts.com/episodes/218-making-generators-in-rails-3有了这个,你就会知道如何创建样式表和脚手架生成器。http://railscasts.com/episodes/216-generators-in-rails-3通过这个,您可以了解如何添加一些文件来修改脚手架View。我想把两者结合起来。我想创建一个生成器,它也可以创建脚手架View。有点像RyanBates漂亮的生成器或web_app_themegem(https://github.com/pilu/web-app-theme)。我
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。问题1)我想知道rubyonrails是否有功能类似于primefaces的gem。我问的原因是如果您使用primefaces(http://www.primefaces.org/showcase-labs/ui/home.jsf),开发人员无需担心javascript或jquery的东西。据我所知,JSF是一个规范,基于规范的各种可用实现,prim
我正在尝试用Prawn生成PDF。在我的PDF模板中,我有带单元格的表格。在其中一个单元格中,我有一个电子邮件地址:cell_email=pdf.make_cell(:content=>booking.user_email,:border_width=>0)我想让电子邮件链接到“mailto”链接。我知道我可以这样链接:pdf.formatted_text([{:text=>booking.user_email,:link=>"mailto:#{booking.user_email}"}])但是将这两行组合起来(将格式化文本作为内容)不起作用:cell_email=pdf.make_c
是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s
我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty