Удалите белую строку рядом с управлением переупорядочиванием на сгруппированном UITableViewCell

вы почти у цели, просто вам нужно добавить оператор group by

select 
   count(orders.id) as order_count, 
   sum(orders.total_cost) as total_spent,
   CONCAT_WS(", ", `last_name`, `first_name`) AS `customer_name`, 
   users.id as user_id
from users
left join orders on users.id = orders.user_id and orders.status != 'Canceled'
group by  `customer_name`, user_id

, также обратите внимание, что если вы делаете левое соединение и вам нужно добавить ограничение на левую соединенную таблицу, вам нужно поставить это в пункте on. Если вы поместите условие левой стороны в предложение where, левое соединение неявно преобразуется во внутреннее соединение

.
7
задан Glorfindel 17 March 2019 в 05:00
поделиться

3 ответа

Когда UITableViewCell показывает элемент управления переупорядочением, он также добавляет пустой белый UIView шириной 1 пиксель к своему массиву подпредставлений.

Откровенно говоря: это ошибка, которую Apple должен исправить.

Однако вы можете обойти это, находя это раздражающее представление каждый раз, когда оно появляется, и устанавливая его цвет фона на прозрачный. Подсказка : раздражающее белое представление всегда является последним в массиве подпредставлений UITableViewCell и всегда имеет ширину 1 пиксель. Мы воспользуемся этим, чтобы найти его.

Когда вы включаете редактирование таблицы, сделайте все видимые раздражающие виды в 1 пиксель прозрачными. Таким образом, метод действия, который переключает режим «редактирования» в таблице, может выглядеть следующим образом:

- (IBAction)edit:(id)sender
{
    [tableView setEditing:!tableView.editing animated:YES];

    for (UITableViewCell *cell in [tableView visibleCells])
    {
        if (((UIView *)[cell.subviews lastObject]).frame.size.width == 1.0)
        {
            ((UIView *)[cell.subviews lastObject]).backgroundColor =
                [UIColor clearColor];
        }
    }
}

и продолжайте делать это для всех новых представлений, когда они становятся видимыми, путем реализации этого в вашем UITableViewDelegate:

12
ответ дан 6 December 2019 в 11:52
поделиться

Здесь нет быстрого ответа, но можете ли вы определить, какой конкретный вид отвечает за эту белую линию?

Один из приемов, который я иногда использую для «отладки» такого рода проблем, - это изменение фона цвета представлений, которые являются вероятными подозреваемыми. Я мог бы установить цвет фона TableViewCell, а также его contentView на красный или синий и посмотреть, можете ли вы изменить цвет линии. Это, по крайней мере, даст вам представление о природе проблемы и, возможно, некоторые идеи о том, как ее решить.

2
ответ дан 6 December 2019 в 11:52
поделиться

Фактически вы можете поймать представление и изменить его, пока ячейка переходит в состояние редактирования. Добавьте (и настройте) переопределение этого метода в свой пользовательский UITableViewCell.

- (void)didTransitionToState:(UITableViewCellStateMask)state
{
//modified from comments here:
//http://www.erasetotheleft.com/post/overriding-the-drag-reorder-control-in-uitableviewcell/

 if(state == UITableViewCellStateEditingMask)
 {
  for (UIControl *control in self.subviews)
  {
   // Find the Reorder Control
   if ([control isMemberOfClass:NSClassFromString(@"UITableViewCellReorderControl")] && [control.subviews count] > 0)
   {
    // Do something with the control
   }
  }
 }
}
1
ответ дан 6 December 2019 в 11:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: