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

时间:2017-10-17 18:08:42

标签: ios uitableview uiimageview

我试图在自动创建的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;
}

1 个答案:

答案 0 :(得分:0)

如果在设置帧大小后仍然得到width = 0,请调用

[cell layoutIfNeeded];