Правильное вращение UITableView с Transform без возни с Интерфейсным Разработчиком - PullRequest
3 голосов
/ 17 мая 2009

UiTableView не обеспечивает горизонтальную прокрутку в ландшафтном режиме.

Мой UiTableView не является полноэкранным (поэтому я не могу просто использовать его в горизонтальном режиме при вращении своего контента, который представляет собой изображение)

Я обнаружил, что для поворота моего UiTableView с помощью Transforms ... Я должен расположить его в Интерфейсном Разработчике в какой-то странной позиции, чтобы при повороте он просто выглядел правильно ...

Кто-нибудь делал это без возни с Интерфейсным Разработчиком? Тот же код?

Ответы [ 4 ]

4 голосов
/ 20 ноября 2012

Хорошо, проблема была в том, что, поскольку ширина табличного представления была гибкой, после поворота ширина ячеек (которая является фактической высотой) также была увеличена. Я преодолел проблему, создав подкласс UITableView и переопределив метод layoutSubviews, так что теперь это выглядит так:

- (void)layoutSubviews {

    [super layoutSubviews];

    for (UIView* child in [self subviews]) {

        CGRect frame1 = child.frame;
        if ([child isKindOfClass:[UITableViewCell class]]) {
            frame1.size.width = 120;
            child.frame = frame1;        
        } 
    }

}
3 голосов
/ 17 мая 2009

См. Раздел «Поведение при изменении размера» в концептуальном руководстве Windows and Views на сайте Apple. Это объясняет, как добиться автоматического поворота от портрета к ландшафту и обратно без использования Interface Builder и без необходимости вручную реализовывать сложные преобразования.

Что касается поворота пользовательского содержимого и отключения прокрутки, см. shouldAutorotateToInterfaceOrientation:interfaceOrientation, willRotateToInterfaceOrientation:duration: и didRotateFromInterfaceOrientation: в UIViewController. Вы можете реализовать эти методы, чтобы перехватывать события вращения, проверять, в какую ориентацию вы двигаетесь, и позаботиться о ваших пользовательских чертежах и настройке свойств там.

Редактировать

В ответ на ваш комментарий я нашел этот бит из Руководства по программированию табличного представления от Apple:

UITableView наследуется от UIScrollView, который определяет прокрутку поведение для просмотров с содержанием больше чем размер окна. UITableView переопределяет прокрутку поведение, позволяющее вертикальную прокрутку только.

Возможно, Apple посчитала горизонтальную прокрутку табличных представлений противоречащей руководящим принципам взаимодействия с человеком. Интересно, не могли бы вы переопределить поведение прокрутки, если вы вложили в подкласс UITableView, но это, вероятно, было бы кучей проб и ошибок. Если вы действительно можете достичь этого, я уверен, что многим здесь будет интересно, как вы это сделали. Некоторое время я искал, пытаясь найти решения других людей, но ничего не смог найти.

Опять же, Apple может не позволить вашему приложению войти в магазин приложений, если вы сделали это, при условии, что оно действительно сломает HIG.

1 голос
/ 12 сентября 2011

Я знаю, что уже немного поздно, но вот мой ответ.

Как уже говорили другие, для достижения горизонтальной прокрутки вы можете применить 90-градусное преобразование к табличному виду. Но, чтобы избавиться от странной ошибки в кадре, вы должны получить кадр до преобразования, применить преобразование и затем восстановить кадр в исходное состояние.



// Save the tableview frame (as it is layed out in IB)
CGRect oldframe = tableview.frame;

// Apply the transform
tableview.transform=CGAffineTransformMakeRotation(M_PI/2);

// For some weird reason, the frame of the table also gets rotated, so you must restore the
//original frame    
tableview.frame = oldframe;


1 голос
/ 01 сентября 2010

Вы можете достичь того, что ищете, выполнив следующие действия:

  1. Создайте UITableView и присоедините его к UIViewController, либо по коду, либо через IB (не используйте UITableViewController)
  2. Примените 90-градусное преобразование против часовой стрелки к вашему столу.
  3. В вашем tableView: cellForRowAtIndexPath: метод примените 90-градусное преобразование по часовой стрелке к своим ячейкам перед их возвратом.

Boum! Теперь у вас есть горизонтальная прокрутка с вертикальными ячейками. Возможно, вам придется исправить ширину и высоту ваших ячеек и таблицы, чтобы все выглядело правильно, но я полагаю, это может вам помочь.

Еще один совет: вы можете контролировать центральную точку вращения, используя слой таблицы. Свойство anchorPoint (это CGPoint). Если вы установите его в другом месте, чем центр границ вида, эффекты поворота (и любые другие эффекты) будут использовать эту точку в качестве эталона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...