UITableview, вертикально центрировать объект ячейки с динамической высотой? - PullRequest
0 голосов
/ 05 октября 2011

У меня есть некоторый UITableViewCell с TextView, который является динамическим, и некоторые другие объекты, которые должны быть вертикально центрированы.

В данный момент я вычисляю высоту UITextView и использую его как ссылку, чтобы установить все на месте.

Проблема, с которой я столкнулся, заключается в том, что иногда он неверно рассчитывает, а «priceLabel», который всегда должен быть посередине, оказывается внизу?Происходит примерно в 20% случаев, когда я прокручиваю, так что ячейка снова становится видимой.

Есть ли способ получить higeht этой ячейки?И почему он рассчитывает неправильно?Это также сокращает UITextView пополам, когда эта проблема появляется?

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
{
    CGSize size;
    NSString *text;
    /* Height of each cell */
     text = @"Some different lengths of text";
     size = [text sizeWithFont:[UIFont fontWithName:@"TrebuchetMS" size:17] constrainedToSize:CGSizeMake(theTableView.bounds.size.width - 260, 800) lineBreakMode:UILineBreakModeWordWrap];

     float totalSize = size.height + 10;
     if (totalSize < 120) {
          return 120;
     } else {
         return totalSize;
     }
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {

        CGSize size;
        NSString *text;
        float totalSize;
        /* Height of each cell */
        text = @"Some different lengths of text";
        size = [text sizeWithFont:[UIFont fontWithName:@"TrebuchetMS" size:17] constrainedToSize:CGSizeMake(theTableView.bounds.size.width - 260, 800) lineBreakMode:UILineBreakModeWordWrap];
            if (size.height + 10 < 120) {
                totalSize = 120;
            } else {
                totalSize = size.height + 10;
            }
        }

        /* Createing a new Cell */
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];

        /* Create the text Label */
        textView = [[[UITextView alloc] initWithFrame: CGRectMake(90,35,theTableView.bounds.size.width - 260 , totalSize)] autorelease];
        [cell.contentView addSubview:textView];
        textView.tag = TEXT_LABEL_TAG;
        textView.backgroundColor = [UIColor clearColor];
        textView.textColor = [UIColor blackColor];
        textView.font = [UIFont fontWithName:@"TrebuchetMS" size:17];
        textView.editable = NO;
        textView.userInteractionEnabled = NO;

        /* Create price Label */
        priceLabel = [[[UILabel alloc] initWithFrame: CGRectMake(theTableView.bounds.size.width - 225, (totalSize/2) - (35/2), 120 , 35)] autorelease];
        [cell.contentView addSubview:priceLabel];
        priceLabel.tag = PRICE_LABEL_TAG;
        priceLabel.textAlignment = UITextAlignmentRight;
        priceLabel.backgroundColor = [UIColor clearColor];
        priceLabel.textColor = [UIColor redColor];
        priceLabel.font = [UIFont fontWithName:@"TrebuchetMS-Bold" size:22];

Ответы [ 2 ]

1 голос
/ 06 октября 2011

У меня было несколько глюков, когда я определил рамку фрейма подпредставления и его позиции в то же время, что и вы в вызовах initWithFrame:.Кажется, что кадр не очень устойчив во время преобразований.Мне повезло с установкой границ и свойств центра после инициализации подпредставления.Это также поможет вам лучше контролировать центрирование.

label.bounds = CGRectMake(0,0,0.6*self.view.frame.size.width,30);
label.center = CGPointMake(0.5*self.view.frame.size.width, 0.23*self.view.bounds.size.height);
0 голосов
/ 05 октября 2011

Ваш код выглядит нормально, за исключением целочисленной математики в координатах.Итак, попробуйте использовать

priceLabel = [[[UILabel alloc] initWithFrame: CGRectMake(theTableView.bounds.size.width - 225, (totalSize/2.f) - (35.f/2.f), 120 , 35)] autorelease];

Это может помочь, но я не уверен.

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