Изображения, появляющиеся с различной шириной в ячейке Programatic UITableView - PullRequest
0 голосов
/ 15 мая 2018

Я создал UITableView программно. Я устанавливаю размер изображения, используя следующий код, а затем помещаю в него различные изображения. Большинство изображений отображаются нормально, но иногда изображение будет слишком узким или слишком широким.

Аналогичный код отлично работает для UITableView, которые я создал в раскадровке, за исключением того, что в этом случае я устанавливаю размер изображения в раскадровке, тогда как здесь я устанавливаю его, как показано ниже. Вот мой код:

//make tableview

self.myTableView = [[UITableView alloc] initWithFrame:
                              CGRectMake(160, 114, 140, 100) style:UITableViewStylePlain];
    _myTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
       _myTableView.rowHeight=24;

//In cellforrowatindexpath
  cell.imageView.frame = CGRectMake(0,0,24,24);
  float imageWidth =cell.imageView.frame.size.width;
//THis is always 24 due to framesize set above but I have it here to check
 cell.imageView.layer.cornerRadius = cell.imageView.frame.size.width / 2;
 cell.imageView.contentMode = UIViewContentModeScaleAspectFill;
 cell.imageView.clipsToBounds = YES;
 [cell.imageView layoutIfNeeded];//THIS HAS NO EFFECT

Кто-нибудь может подсказать, что здесь происходит? Заранее спасибо за любые предложения.

enter image description here

1 Ответ

0 голосов
/ 15 мая 2018

добавьте к вашему табличному представлению пользовательскую ячейку с UIImageView, я не знаю причину, но вы не можете изменить размер стандартного изображения табличного представления.
как это:

//  ViewController.m
//  StackOverflowOBJC
//
//  Created by Ramires Moreira on 5/15/18.
//  Copyright © 2018 Ramires Moreira. All rights reserved.
//

#import "ViewController.h"

@interface ViewController  ()

@end

@implementation ViewController  

- (void)viewDidLoad {
    [super viewDidLoad];
    CGRect frame = [[[self view] layer] bounds];
    UITableView *table = [[UITableView alloc] initWithFrame:frame style:UITableViewStylePlain];
    [table setDelegate:self];
    [table setDataSource:self];
    [[self view] addSubview:table];
}


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    // create a cell
    CGRect cellFrame = CGRectMake(0, 0, [[tableView layer] bounds].size.width, 300);
    UITableViewCell *cell = [[UITableViewCell alloc] initWithFrame:cellFrame];

    //create a image view with a image
    CGRect imageFrame = CGRectMake(33, 10, 90, 90);
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:imageFrame];

    // get a image from the Assests
    UIImage *image = [UIImage imageNamed:@"jobs"];
    [imageView setImage:image];

    //configure the imageView
    [ imageView setContentMode:UIViewContentModeScaleAspectFill];
    imageView.layer.cornerRadius = imageView.frame.size.width / 2;
    imageView.clipsToBounds = YES;


    // create a label
    CGFloat height = cell.frame.size.height;
    CGFloat width = [[cell layer] bounds].size.width;
    CGRect frameLabel = CGRectMake(300, height/2, width, height);
    UILabel *label = [[UILabel alloc] initWithFrame:frameLabel];
    label.text = @"teste";

    //add all subviews
    [cell addSubview:label];
    [cell addSubview:imageView];
    return cell;
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}
// resize your cell
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return  110.0;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 3;
}

@end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...