0

の高さを動的に調整するにはどうすればよいUIScrollViewですか?基本的に、UILabels作成されたものがたくさんあり(UILabelの正確な数はランダムです)、UIScrollViewに対応するために高さを自動的に調整しますUILables。これは私がこれまでに持っているものviewDidLoadです。

- (void)viewDidLoad
{
[scroller setScrollEnabled:YES];
[scroller setContentSize:CGSizeMake(320
                                    , 1500)];
scroller.indicatorStyle = UIScrollViewIndicatorStyleWhite;
{ 

そして、これは追加のUILavelを作成するアクションです

-(IBAction)scheduale{
int i;
for(i=0; i<[self retrieveTime] ; i++){
    //Add time label
    UILabel *timeLabel = [[UILabel alloc] init];
    timeLabel.frame = CGRectMake(10, (i+1) * 21, 31, 20);
    timeLabel.textColor = [UIColor whiteColor];
    timeLabel.backgroundColor = [UIColor colorWithRed:76.0/225.0 green:76.0/225.0 blue:76.0/225.0 alpha:1.0];
    NSString *labelString;
    labelString = [[NSNumber numberWithInt:i] stringValue];
    timeLabel.text = labelString;
    timeLabel.textAlignment = UITextAlignmentCenter;
    //theLabel.tag = (i+1) * 100;
    [scroller addSubview:timeLabel];
}
4

2 に答える 2

2

ラベルの作成が完了したら、追加するラベルの数とその高さを追跡してコンテンツサイズを設定するために、変数を保持する必要があります。以下の調整済みコードを参照してください。

-(IBAction)scheduale{

 int i; 
 int contentSize = 0;

 for(i=0; i<[self retrieveTime] ; i++){

     UILabel *timeLabel = [[UILabel alloc] init];
     timeLabel.frame = CGRectMake(10, (i+1) * 21, 31, 20);
     contentSize += 20;
     timeLabel.textColor = [UIColor whiteColor];
     timeLabel.backgroundColor = [UIColor colorWithRed:76.0/225.0 green:76.0/225.0 blue:76.0/225.0 alpha:1.0];
     NSString *labelString;
     labelString = [[NSNumber numberWithInt:i] stringValue];
     timeLabel.text = labelString;
     timeLabel.textAlignment = UITextAlignmentCenter;
     //theLabel.tag = (i+1) * 100;
     [scroller addSubview:timeLabel]; }

 [scroller setContentSize:CGSizeMake(320, contentSize)];
于 2012-04-05T02:26:04.057 に答える
0

@Kyleに同意しますが、コンテンツサイズはラベルの位置に応じて進み、最後の位置+最後の高さで終わります。したがって、彼のアイデアはそこで少し調整する必要があります。

また、確認のために:@world peace-スクローラーのフレームを変更しますか、それともコンテンツサイズだけを変更しますか?@Kyleは、少なくともコンテンツサイズを変更する必要があるということは正しいです。

そのコードのクリーンアップは次のとおりです。

#define kButtonWidth   31.0
#define kButtonHeight  20.0
#define kMargin         1.0

-(IBAction)scheduale {

    int i;
    CGFloat contentPositionY = 0.0;

    UIColor *labelColor = [UIColor colorWithRed:76.0/225.0 green:76.0/225.0 blue:76.0/225.0 alpha:1.0];

    for(i=0; i<[self retrieveTime] ; i++){
        //Add time label
        UILabel *timeLabel = [[UILabel alloc] init];

        timeLabel.frame = CGRectMake(0, contentPositionY, kButtonWidth, kButtonHeight);
        contentPositionY += kButtonHeight + kMargin;

        timeLabel.textColor = [UIColor whiteColor];
        timeLabel.backgroundColor = labelColor;

        timeLabel.text = [NSString stringWithFormat:@"@d", i];

        timeLabel.textAlignment = UITextAlignmentCenter;
        //theLabel.tag = (i+1) * 100;
        [scroller addSubview:timeLabel];
    }

    // now size the content
    scroller.contentSize = CGSizeMake(kButtonWidth, contentPositionY + kButtonHeight);

    // and to get the margins you built into the loop calculation
    scroller.contentInset = UIEdgeInsetsMake(21, 10, 0, 0);   // your code implied these values
}
于 2012-04-05T03:02:03.447 に答える