2011-07-22 18 views
6

高さの異なるセルでUITableViewを作成しました。 各セルにaccessoryView(UIImageView)を添付しました。UITableViewCell accessoryセルの高さでの位置の変更

セルの高さによってはアクセサリタイプの位置が異なります(添付画像参照)。 どうすれば修正できますか?

どのテーブルビューでも正常なようです。答えは見つかりませんでした。

ありがとうございました。 http://i.stack.imgur.com/kKOn0.png

UPDATE:マイcellForRowAtIndexPath:

NSDictionary *currentTime = [listOfTimes objectAtIndex:indexPath.row]; 


UITableViewCell *cell; 
if([[currentTime objectForKey:@"freq"] intValue] > 0) cell = [self getCellFreqContentView:@"CellFreq"]; 
else cell = [self getCellContentView:@"Cell"]; 

[NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehavior10_4]; 
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setDateStyle:NSDateFormatterNoStyle];  
[dateFormatter setTimeStyle:NSDateFormatterShortStyle]; 

UILabel *lblTemp1 = (UILabel *)[cell viewWithTag:1]; 
UILabel *lblTemp2 = (UILabel *)[cell viewWithTag:2]; 

if([[currentTime objectForKey:@"freq"] intValue] > 0) { 

    lblTemp1.text = [NSString stringWithFormat:@"%@\n\n%@", [dateFormatter stringFromDate:[NSDate dateWithTimeIntervalSinceReferenceDate:[[currentTime objectForKey:@"arrival_time_seconds"] doubleValue]]],[dateFormatter stringFromDate:[NSDate dateWithTimeIntervalSinceReferenceDate:[[currentTime objectForKey:@"departure_time_seconds"] doubleValue]]]]; 

    UILabel *lblTemp3 = (UILabel *)[cell viewWithTag:3]; 
    UILabel *lblTemp4 = (UILabel *)[cell viewWithTag:4];   
    lblTemp3.text = @"↓"; 
    lblTemp4.text = [NSString stringWithFormat:NSLocalizedString(@"A pass every %i minutes", nil), [[currentTime objectForKey:@"freq"] intValue]/60]; 
} else { 
    lblTemp1.text = [dateFormatter stringFromDate:[NSDate dateWithTimeIntervalSinceReferenceDate:[[currentTime objectForKey:@"departure_time_seconds"] doubleValue]]]; 
} 

lblTemp2.text = [currentTime objectForKey:@"trip_headsign"]; 

cell.selectionStyle = UITableViewCellSelectionStyleNone; 

UIView *vv = [[UIView alloc] initWithFrame:cell.frame]; 
if(indexPath.row == [ScheduleManager getRowForTime:listOfTimes] && isCurrentPeriod == TRUE) { 
    vv.backgroundColor = [BKColor colorWithHexString:@"54B8BB"]; 
} 

// SPECIAL CASES 
if([[currentTime valueForKey:@"runoff"] count] > 0 && useExceptions == TRUE) { 
    // ACCESSORY 
    cell.accessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"times-special.png"]]; 
} 

cell.backgroundView = vv; 

return cell; 
} 
+0

あなたはこの画像が見えるようにしたいどうすればよい:

おそらく最良の方法は、UITableViewCellのサブクラスを、そしてlayoutSubviewsメソッドをオーバーライドするのですか? – Legolas

+0

アクセサリは通常、セル内で垂直方向の中央に配置され、同じX軸値ですべて正しく整列する必要があります。 –

+0

あなたの 'cellForRowAtIndexPath'を提供してください。 – Legolas

答えて

23

私は、右、上、下の端からの距離が何らかの方法で相関しているように、あなたはそれを再配置する必要がありますのでaccessoryViewが、配置されていると思います。

- (void)layoutSubviews { 
    [super layoutSubviews]; 
    CGRect accessoryFrame = self.accessoryView.frame; 
    accessoryFrame.origin.x = <desired position here>; 
    self.accessoryView.frame = accessoryFrame; 
} 
+0

これは正しい方法です! @myszonに感謝します。 –

+0

こんにちは、 私も同じ問題がありますが、Expressionは割り当て可能ではありません。 –

+8

このコンテキストではxとyに値を直接適用することはできませんが、代わりに次のようにしてください:self.accessoryView.frame = CGRectMake(self.accessoryView.frame.origin.x、10.0、self.accessoryView.frame.size .width、self.accessoryView.frame.size.height); –

関連する問題