- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试构建一个包含多个 subview 的自定义 UITableCellView,但现在我正在努力处理其中两个(最大的):一个 UIImageView(我不介意使用 UIWebView,因为图像来自互联网)和一个 UITextView,它应该在不滚动的情况下立即显示所有文本。在这种情况下,我开始使用 XIB 文件和子类化 UITableCellView(自动布局禁用)构建自定义单元格:
我向自定义类添加了两个新属性 (IBOutlet)(非常简单):
@interface NewsFeedPostCell : UITableViewCell<UITextViewDelegate>
{
UIImageView *picView;
UITextView *postContent;
}
@property IBOutlet UIImageView *picView;
@property IBOutlet UITextView *postContent;
@end
之后,我使用它们来填充数据(我从 iTunes 获取了一些返回漂亮的 JSON @"http://itunes.apple.com/search?term=ice%20age&country=us&entity=movie "的东西)。目前我专注于正确显示数据而不获取每个单元格的确切大小(除了不同文本的大小)但我有很多问题:内容未正确显示,因为文本未全部显示,首先行不显示图像等。我在 stackoverflow 上读了很多书,但我开始对人们解决它的许多不同方法感到痛苦,因为我也只使用代码进行了测试,但我遇到了类似甚至更糟的事情。
我在这里的主要问题/提示是什么可能是构建具有不同高度和 subview 的自定义单元格的复杂表格的最佳方法,以及如何计算大小,或者比这更好,何时何地(在代码中)因为heightForRowAtIndexPath
在我下载图像以获取它们的大小之前被调用。有很多用于布局、重绘和“适合大小”的属性,但其中任何一个似乎都没有像我想象的那样工作。我觉得我太了解 iOS 应用程序中的布局是如何工作的,而且在我看来 UI 元素根本没有灵 active :(
这是使用的源代码(顺便说一句,我使用 AFNetworking 库来获取图像并将它们加载到 UIImageView 中):
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *simpleTableIdentifier = @"PostCell";
NewsFeedPostCell *cell;
NSDictionary *post = [self.posts objectAtIndex:indexPath.row];
NSString *postText = [post objectForKey:@"longDescription"];
cell= (NewsFeedPostCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"NewsFeedCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
}
CGRect picFrame = cell.picView.frame;
picFrame = CGRectMake(100, 0, 300, 100);
[cell.picView setFrame:picFrame];
[cell.picView setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[post objectForKey:@"artworkUrl100"]]]
placeholderImage:nil
success:^(NSURLRequest *request , NSHTTPURLResponse *response , UIImage *image ){
NSLog(@"Loaded successfully: %d", [response statusCode]);
[cell.picView setImage:image];
[cell.picView sizeToFit];
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error){
NSLog(@"failed loading: %@", error);
}
];
CGSize stringSize = [self calculateTextHeight:postText];
CGRect postFrame = cell.postContent.frame;
postFrame = CGRectMake(10, 100, 300, stringSize.height);
cell.postContent.frame = postFrame;
cell.postContent.autoresizingMask = UIViewAutoresizingFlexibleHeight;
cell.postContent.font = [UIFont systemFontOfSize:POST_CONTENT_FONT_SIZE];
cell.postContent.text= postText;
[cell.postContent setContentInset:UIEdgeInsetsZero];
[cell.postContent sizeThatFits:cell.postContent.contentSize];
return cell;
}
查看屏幕截图中的问题(我正在使用 iOS 模拟器模拟 3.5"视网膜设备并用作构建应用程序 iOS SDK 6.1 的目标)
第一行(图片在顶栏下方;您必须滚动才能看到)
另一行没有正确显示文本,我必须向下/向上滚动才能得到它:
并且不可能完成最后一行文本:
最佳答案
制作具有不同高度的自定义单元格的最佳方法是:
为单元格创建一个 NSMutableArray:
@property (nonatomic,retain)NSMutableArray* cellsArray;
然后在 m.:
调用的第一个方法是
-(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
在这里制作你的手机:
-(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
if (!self.cellsArray) {
self.cellsArray = [[NSMutableArray alloc]init];
}
ListCell* cell = [[ListCell alloc] initWithFrame:CGRectMake(0, 0,, 50)];
// IMPLEMENT your custom cell here, with custom data, with custom,different height:
// after add this cell to your array:
[self.cellsArray addObject:cell];
// IMPORTANT STEP: set your cell height for the new height:
cell.frame = CGRectMake(cell.frame.origin.x, cell.frame.origin.y, 303, yourLastItemInCell.frame.origin.y + yourLastItemInCell.frame.size.height);
return cell.frame.size.height;
}
在你得到不同高度的自定义单元格之后:
#pragma mark - conform to delegates
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 10;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
return self.cellsArray[indexPath.row];
}
希望对你有帮助!
关于ios - iOS 应用程序 : XIB or coding? 的自定义单元格。高度和框架位置的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18700061/
好的,所以我编辑了以下... 只需将以下内容放入我的 custom.css #rt-utility .rt-block {CODE HERE} 但是当我尝试改变... 与 #rt-sideslid
在表格 View 中,我有一个自定义单元格(在界面生成器中高度为 500)。在该单元格中,我有一个 Collection View ,我按 (10,10,10,10) 固定到边缘。但是在 tablev
对于我的无能,我很抱歉,但总的来说,我对 Cocoa、Swift 和面向对象编程还很陌生。我的主要来源是《Cocoa Programming for OS X》(第 5 版),以及 Apple 的充满
我正在使用 meta-tegra 为我的 NVIDIA Jetson Nano 构建自定义图像。我需要 PyTorch,但没有它的配方。我在设备上构建了 PyTorch,并将其打包到设备上的轮子中。现
在 jquery 中使用 $.POST 和 $.GET 时,有没有办法将自定义变量添加到 URL 并发送它们?我尝试了以下方法: $.ajax({type:"POST", url:"file.php?
Traefik 已经默认实现了很多中间件,可以满足大部分我们日常的需求,但是在实际工作中,用户仍然还是有自定义中间件的需求,为解决这个问题,官方推出了一个 Traefik Pilot[1] 的功
我想让我的 CustomTextInputLayout 将 Widget.MaterialComponents.TextInputLayout.OutlinedBox 作为默认样式,无需在 XML 中
我在 ~/.emacs 中有以下自定义函数: (defun xi-rgrep (term) (grep-compute-defaults) (interactive "sSearch Te
我有下表: 考虑到每个月的权重,我的目标是在 5 个月内分散 10,000 个单位。与 10,000 相邻的行是我最好的尝试(我在这上面花了几个小时)。黄色是我所追求的。 我试图用来计算的逻辑如下:计
我的表单中有一个字段,它是文件类型。当用户点击保存图标时,我想自然地将文件上传到服务器并将文件名保存在数据库中。我尝试通过回显文件名来测试它,但它似乎不起作用。另外,如何将文件名添加到数据库中?是在模
我有一个 python 脚本来发送电子邮件,它工作得很好,但问题是当我检查我的电子邮件收件箱时。 我希望该用户名是自定义用户名,而不是整个电子邮件地址。 最佳答案 发件人地址应该使用的格式是: You
我想减小 ggcorrplot 中标记的大小,并减少文本和绘图之间的空间。 library(ggcorrplot) data(mtcars) corr <- round(cor(mtcars), 1)
GTK+ noob 问题在这里: 是否可以自定义 GtkFileChooserButton 或 GtkFileChooserDialog 以删除“位置”部分(左侧)和顶部的“位置”输入框? 我实际上要
我正在尝试在主页上使用 ajax 在 magento 中使用 ajax 显示流行的产品列表,我可以为 5 或“N”个产品执行此操作,但我想要的是将分页工具栏与结果集一起添加. 这是我添加的以显示流行产
我正在尝试使用 PasswordResetForm 内置函数。 由于我想要自定义表单字段,因此我编写了自己的表单: class FpasswordForm(PasswordResetForm):
据我了解,新的 Angular 7 提供了拖放功能。我搜索了有关 DnD 的 Tree 组件,但没有找到与树相关的内容。 我在 Stackblitz 上找到的一个工作示例.对比drag'ndrop功能
我必须开发一个自定义选项卡控件并决定使用 WPF/XAML 创建它,因为我无论如何都打算学习它。完成后应该是这样的: 到目前为止,我取得了很好的进展,但还有两个问题: 只有第一个/最后一个标签项应该有
我要定制xtable用于导出到 LaTeX。我知道有些问题是关于 xtable在这里,但我找不到我要找的具体东西。 以下是我的表的外观示例: my.table <- data.frame(Specif
用ejs在这里显示日期 它给我结果 Tue Feb 02 2016 16:02:24 GMT+0530 (IST) 但是我需要表现为 19th January, 2016 如何在ejs中执行此操作?
我想问在 JavaFX 中使用自定义对象制作 ListView 的最佳方法,我想要一个每个项目如下所示的列表: 我搜了一下,发现大部分人都是用细胞工厂的方法来做的。有没有其他办法?例如使用客户 fxm
我是一名优秀的程序员,十分优秀!