iOS7 tableview cell.imageview extra padding?

前端 未结 2 528
难免孤独
难免孤独 2020-12-16 06:28

I have a tableview which renders perfectly in iOS 6 & has done so for years. In iO7 in the same tableview either side of the cell.imageview its adding some extra padding

2条回答
  •  刺人心
    刺人心 (楼主)
    2020-12-16 06:58

    In iOS7, the UITableViewCell's predefined property imageView is indented towards right by 15pt by default.
    And this has nothing to do with the following UITableViewCell properties

    indentationLevel
    indentationWidth
    shouldIndentWhileEditing
    separatorInset
    

    Therefore creating your own custom UITableViewCell is the best way to overcome it.
    According to Apple, there are 2 good ways to do it:

    If you want the cell to have different content components and to have these laid out in different locations, or if you want different behavioral characteristics for the cell, you have two alternatives:

    • Add subviews to a cell’s content view.
    • Create a custom subclass of UITableViewCell.

    Solution:

    As you don't prefer subclassing UITableViewCell, so adding custom subviews is your choice.
    Simply creates your own image view and text labels, and add them through code or through storyboard. e.g.

    //caution: simplied example
    - (UITableViewCell *)tableView:(UITableView *)tableView
             cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        //get the cell object
        static NSString *CellIdentifier = @"myCell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        
        //create your own labels and image view object, specify the frame
        UILabel *mainLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, 220.0, 15.0)];
        [cell.contentView addSubview:mainLabel];
    
        UILabel *secondLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 20.0, 220.0, 25.0)];
        [cell.contentView addSubview:secondLabel];
        
        UIImageView *photo = [[UIImageView alloc] initWithFrame:CGRectMake(225.0, 0.0, 80.0, 45.0)];
        [cell.contentView addSubview:photo];
        
        //assign content
        mainLabel.text = @"myMainTitle";
        secondLabel.text = @"mySecondaryTitle";
        photo.image = [UIImage imageNamed:@"myImage.png"];
        return cell;
    }
    

    Note that as the predefined UITableViewCell content properties: cell.textLabel, cell.detailTextLabel and cell.imageView are untouched so they will remind nil and will not be shown.


    Reference:

    A Closer Look at Table View Cells https://developer.apple.com/Library/ios/documentation/UserExperience/Conceptual/TableView_iPhone/TableViewCells/TableViewCells.html#//apple_ref/doc/uid/TP40007451-CH7-SW1

    Hope this help!

提交回复
热议问题