1

I have a customized UITableViewCell. These have the following issues:

  1. The delete button is too far right, overlapping my background. I'd like to set an inset so that it moves it just a little to the left and then it would look great.

Delete button overlapping

The blue highlighted state spans the entire width of the screen, and I'd like it just to be set inside my curved cell background's bounds.

Highlighted state

Is there a way to fix these two issues? Thanks.

Edit: My code is as follows to set the background (just a custom method):

- (UIImage *)cellBackgroundForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSInteger rowCount = [self tableView:[self tableView] numberOfRowsInSection:0];
    NSInteger rowIndex = indexPath.row;
    UIImage *background = nil;

    if (rowIndex == 0) {
        background = [UIImage imageNamed:@"cell_top.png"];
    } else if (rowIndex == rowCount - 1) {
        background = [UIImage imageNamed:@"cell_bottom.png"];
    } else {
        background = [UIImage imageNamed:@"cell_middle.png"];
    }

    return background;
}

I then call this method inside a reloadTable void method that just gets every cell and updates it after there has been a row update (adding or removing a row, because there are 3 different images for the table). I also call this after my fetched results controller gets all my items from Core Data and loads the table up for the first time.

Edit 2: This is the code for the reloadTable method:

- (void)refreshTable
{
    for (NSInteger j = 0; j < [self.tableView numberOfSections]; ++j)
    {
        for (NSInteger i = 0; i < [self.tableView numberOfRowsInSection:j]; ++i)
        {
            UIImage *background = [self cellBackgroundForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:j]];

            UIImageView *cellBackgroundView = [[UIImageView alloc] initWithImage:background];
            cellBackgroundView.image = background;
            UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:j]];
            cell.backgroundView = cellBackgroundView;
        }
    }
}

The problem is: I have no idea how to set margins or width of a tableView or table view cell. Do I need to subclass something? How is it generally done?

4

1 に答える 1

1

問題は、テーブル ビューのフレーム幅です。選択したセルの青色がセル全体を埋め尽くします。そのため、テーブル ビューの幅を小さくしてmargins、この方法でdeleteボタンも少し表示されるようにする必要があります。左。ただし、最初と最後のセルは角が丸いため、それらを選択すると問題が残りますが、青い選択には角が丸くないため、選択した状態の .png 画像を作成することをお勧めします (最初のセルの 1 つ) 、中央のセル用に 1 つ、下部のセル用に 1 つ)

編集

iOS では、という概念はmargins存在しません。より理解しやすいと思ったので、その用語を使用しましたが、テーブル ビューの左右に少しスペースを表示するには、次のようにします。

yourTableView.frame = CGRectMake(leftMarginSpace,
                                 0,
                                 self.view.frame.size.width 
                                     - leftMarginSpace 
                                     - rightMarginSpace, 
                                 self.view.frame.size.height);

したがって、テーブル ビューをビュー コントローラーのビューに追加した場合、テーブル ビューはleftMarginSpace左から離れた位置、ビュー コントローラーの上部 (0 y 位置)、rightMarginSpace右から離れた位置に配置され、ビュー コントローラーの高さになります。

テーブル ビューをサブビューとして別のビュー (View Controller のビューではない) に追加する場合は、次のようにフレームを変更する必要があります。

yourTableView.frame = CGRectMake(leftMarginSpace,
                                     0,
                                     parentView.frame.size.width 
                                         - leftMarginSpace 
                                         - rightMarginSpace, 
                                     parentView.frame.size.height);

また、グループ化されたテーブル ビュー スタイルを作成したいので、grouped table view.

于 2013-05-16T21:44:16.500 に答える