2014-10-22 3 views
1

У меня есть UITableView с тремя динамическими строками. При отображении UITableViewController в первый раз все работает нормально. После поворота строки, у которых есть данные в нем, получают отступы, несмотря на то, что я установил setLayoutMargins в ноль. Я до сих пор не могу воспроизвести эту проблему в другом проекте. Он появляется только в iOS 8, но только на одной таблице. Тот же источник для таблицы работает в тестовом проекте без проблем. Единственное отличие здесь в том, что оно находится в контейнере с некоторыми другими представлениями.Отступ UITableViewCell изменяется после вращения только на iOS 8

Я проверил ограничения макета, методы вращения, прокомментировал все - все без успеха. Изменение отступа происходит между willRotateToInterfaceOrientation и didRotateToInterfaceOrientation или после viewWillTransitionToSize. Я даже обновил iOS 8.1 с теми же результатами.

Неужели кто-то испытал подобное поведение?

PS: Что я также заметил, что при настройке полей макета на ноль на iOS 8 анимация не такая гладкая, как это было бы со значениями по умолчанию (с отступом). На iOS 7 анимация всегда гладкая.

EDIT:

Я отслеживал некоторые вещи вниз. Если UITableViewController встроен в UINavigationController, то отступ происходит при вращении. Если вы повернуть дальше, оно возвращается к его отступу (без отступов в моем случае).

Если UITableViewController встроен в контейнер (и этот контейнер находится в контроллере навигации), то после поворота ячейки возвращается по умолчанию отступ. Если вы вращаетесь дальше, это поведение остается неизменным (всегда отступом).

Есть ли какие-либо события, которые не отправляются на контроллер детского просмотра, или никто из вас не использует UITableViewController, встроенный в UINavigationController?

ответ

0

По-моему, это ошибка IOS 8 или ошибка Xamarin. Возможно, другой может проверить, совпадает ли это с его установкой. Я использую Xamarin Studio 5.5.2 с Xcode 6.1.

Одно некрасиво решение этого заключается в следующем:

public override void DidRotate (UIInterfaceOrientation fromInterfaceOrientation) 
{ 
    base.DidRotate (fromInterfaceOrientation); 

    // otherwise cells are indented! iOS 8 Bug? 
    TableView.ReloadData(); 
} 

Можно использовать reloadData или reloadSection в didRotateFromInterfaceOrientation, несмотря на это осуждается функция. Но нет viewDidTransitionToSize и я также должен поддерживать IOS 7.

Edit:

Другое решение, которое я придумал, чтобы сделать пользовательский разделитель. Это работает только для iOS 8 и ответит на вопрос (несмотря на то, что у меня другая проблема в iOS 7, где этот подход не помогает).

Смежные вопросы