IOS/Objective-C:确定以编程方式创建的 tableview 中 imageView 的大小

Posted

技术标签:

【中文标题】IOS/Objective-C:确定以编程方式创建的 tableview 中 imageView 的大小【英文标题】:IOS/Objective-C: Determine size of imageView in tableview created programatically 【发布时间】:2017-10-17 18:08:41 【问题描述】:

我正在尝试在自动创建的 tableView 中读取 imageView 的宽度和高度,以便进行一些修改。

但是,我通常使用的方法是返回 0 作为宽度,这可能是因为 imageView 没有明确定义。有谁知道这样做的方法。

float imageWidth =cell.imageView.frame.size.width;

注意:这就是我创建 tableview 的方式:

-(void) makeTableView 
    //origin,origin,width,height
    _myTableView = [[UITableView alloc] initWithFrame:
                              CGRectMake(160, 114, 140, 100) style:UITableViewStylePlain];
    _myTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    _myTableView.delegate = self;
    _myTableView.dataSource = self;
    _myTableView.scrollEnabled = YES;
    _myTableView.layer.cornerRadius = 5;
    _myTableView.hidden = YES;
    _myTableView.backgroundColor = [UIColor grayColor];
    _myTableView.rowHeight=24;
    _myTableView.layer.borderColor=[UIColor grayColor].CGColor;
    _myTableView.layer.borderWidth=1;
    [self.view addSubview:_myTableView];


也许这里有一种方法可以设置图像大小,但我不知道会是什么。

或者,我可以将这些值设置为here,但这似乎涉及对 tableviewcell 进行子类化或修改上下文,这很昂贵,而且还会阻止我对图像进行四舍五入。

编辑:我当前的 cellforRowAtIndexPath

我似乎可以使用下面的代码设置 imageView 的大小。然而,通常情况下,无论传入图片的大小如何,下面的代码都会创建漂亮的圆形图像——并非所有图片都是方形的。相反,有些图像是圆形的,而另一些则是椭圆形的。所以有些东西在这里不起作用......

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    UITableViewCell *cell = nil;
    if (tableView == myTableView) 
      static NSString *myRowIdentifier = @"myRowIdentifier";
    cell = [tableView dequeueReusableCellWithIdentifier:myRowIdentifier];
    if (cell == nil) 
        cell = [[UITableViewCell alloc]
                initWithStyle:UITableViewCellStyleDefault reuseIdentifier:myRowIdentifier] ;
    
     Items* item = [_items objectAtIndex:indexPath.row];
     cell.textLabel.text = item.name;
    NSString*pic = item.pic;
    if (pic.length >=3) 
        cell.imageView.image = [self loadImageNamed:pic];
    
    else 
    cell.imageView.image = [UIImage imageNamed:@"placeholder.png"];
    
        //Because there is no custom cell, set size of imageview with following code
       cell.imageView.frame = CGRectMake(0,
                                          0,
                                          24,
                                          24); 
        cell.imageView.layer.cornerRadius = cell.imageView.frame.size.width / 2;
        cell.imageView.clipsToBounds = YES;    
        cell.imageView.contentMode = UIViewContentModeScaleAspectFill;

【问题讨论】:

您能出示您的cellForRowAtIndexPath 代码吗? 【参考方案1】:

如果在设置帧大小后仍然得到宽度=0,请重新使用

[cell layoutIfNeeded];

【讨论】:

以上是关于IOS/Objective-C:确定以编程方式创建的 tableview 中 imageView 的大小的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 7/Objective-C 中,如何以编程方式将 UIPickerView 捕捉到它所在的父视图的底部?

如何在 iOS Objective-c 中实现交互式远程通知

IOS/Objective-C:在呈现视图控制器中设置属性

iOS:Objective-C 创建类属性错误:使用未声明的标识符

IOS / Objective-C:核心数据NSPredicate使用IN不返回所有匹配

IOS / Objective-C / Storyboard:从左到右的自定义Segue在视图控制器之间创建黑条