1

私はiOSが初めてで、なぜこれが起こったのかわからない重大な問題があります。また、この背後にある理由を見つけようとしましたが、失敗しました。

Twitter api を使用して特定のユーザーのツイートを取得するアプリを iPhone で作成しています。json データの取得に問題はなく、ストーリーボードを使用して iOS 6 の UITableView に表示することもできます。行の高さを 200 px に変更しました。ユーザー名のテキストツイートと画像を表示できるようにします。

しかし、上下にスクロールするとUITableViewCell、スクロールバーが画面の外に出ます。

何が原因でしょうか?どうすれば修正できますか?

スクリーンショット

最初に、アプリがスクロールバーをロードするとこのように表示され、フルスクリーンが表示されます

ここに画像の説明を入力


スクロールすると画面の外に出る

ここに画像の説明を入力

ついに完全に画面外に出ました

ここに画像の説明を入力

UITableView デリゲート メソッド

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

    NSMutableArray *name,*time,*tweet,*image;

    name=[[NSMutableArray alloc]init];
    time=[[NSMutableArray alloc]init];
    tweet=[[NSMutableArray alloc]init];
    image=[[NSMutableArray alloc]init];


    static NSString *CellIdentifier = @"SimpleTableItem";

    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];


    for (User *userModel in self.user) {
        [name addObject:userModel.nameStr];
        [image addObject:userModel.imageStr];

    }

    for (Json *jsonModel in self.json) {
        [tweet addObject:jsonModel.tweetStr];
        [time addObject:jsonModel.timeStr];


    }

    // Fetch using GCD
    dispatch_queue_t downloadThumbnailQueue = dispatch_queue_create("Get Photo Thumbnail", NULL);
    dispatch_async(downloadThumbnailQueue, ^{
        NSString *imageURL=[image objectAtIndex:indexPath.row];
        NSURL *url = [NSURL URLWithString:imageURL];
        NSData *data = [NSData dataWithContentsOfURL:url];
        UIImage *img = [[UIImage alloc] initWithData:data];
        dispatch_async(dispatch_get_main_queue(), ^{

            UIImageView *image = (UIImageView *)[cell.contentView viewWithTag:5];
            image.image=img;

            [cell setNeedsLayout];
            [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
            [spinner stopAnimating];

        });
    });

    self.labelName = (UILabel *)[cell.contentView viewWithTag:10];
    [self.labelName setText:[NSString stringWithFormat:@"%@", [name objectAtIndex:indexPath.row]]];


   self.labelTime = (UILabel *)[cell.contentView viewWithTag:11];
    [self.labelTime setText:[NSString stringWithFormat:@"%@", [time objectAtIndex:indexPath.row]]];




     self.labelTweet = (UILabel *)[cell.contentView viewWithTag:12];
    [self.labelTweet setText:[NSString stringWithFormat:@"%@", [tweet objectAtIndex:indexPath.row]]];


    cell.imageView.frame=CGRectMake(0, 0, 40, 40);
    cell.textLabel.lineBreakMode=NSLineBreakByWordWrapping;

    return cell;

}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    CGFloat rowHeight=self.labelName.frame.size.height+self.labelTime.frame.size.height+self.labelTweet.frame.size.height+50;
        return rowHeight;
}
4

3 に答える 3

2

スクロールが画面の外に出るということは、tableViewフレームが画面サイズよりも大きいことを意味します

setFrame:メソッドを使用してテーブルビューのフレームを適切に設定します

于 2013-05-22T05:13:48.620 に答える
1

UITableView の高さを確認する必要があると思います。スクリーンショットを表示します。

于 2013-05-22T05:12:38.110 に答える