UITableViewCellの削除ボタンの位置を移動したい

現在制作中のアプリで UITableViewCell の背景に画像を配置してカスタマイズしているのですが、削除ボタンがデザイン上ではセルの右側にぴったりとくっついてしまいます。

削除ボタンのオブジェクトを取得して少し左に移動することはできたのですが、なぜかアニメーションが不自然な感じになってしまいます。

- (void)willTransitionToState:(UITableViewCellStateMask)state
{
    // セルの状態を取得
    [super willTransitionToState:state];
	deleteState = NO;

    if (UITableViewCellStateShowingDeleteConfirmationMask == (state & UITableViewCellStateShowingDeleteConfirmationMask)) {
        deleteState = YES;
    }
    if (UITableViewCellStateShowingEditControlMask == (state & UITableViewCellStateShowingEditControlMask)) {
        deleteState = YES;
    }
}

- (void)layoutSubviews
{
	// Deleteボタンの位置を調整
    if (deleteState) {
		for (UIView *subview in self.subviews) {
            if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"]) {
				
				// 削除ボタンの位置を直接動かすとアニメーションが不自然
				//UIView *deleteButtonView = (UIView *)[subview.subviews objectAtIndex:0];
				//CGRect f = deleteButtonView.frame;
				//f.origin.x -= 20;
				//deleteButtonView.frame = f;
				
				// subviewごと動かして対応
				CGRect sf = subview.frame;
				sf.origin.x -= 6;
				subview.frame = sf;
            }
        }
    }
}

試行錯誤の結果、削除ボタンを動かすのではなく、willTransitionToState: メソッドで状態を取得して layoutSubviews メソッドで削除ボタンの親の frame を位置することで解決できました。

Tweet about this on TwitterShare on Facebook0Share on Google+0Pin on Pinterest0

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です