У меня есть UITableView, размер которого я изменяю при отображении клавиатуры.
// MonoTouch code
// Resize the table so it's not hidden by the keyboard
var keyboardFrame = UIKeyboard.BoundsFromNotification(notification);
var tableFrame = myTable.Frame;
tableFrame.Height = theView.Frame.Height - keyboardFrame.Height;
myTable.Frame = tableFrame;
// Bring the current cell back in view
this.InvokeOnMainThread(()=>{
if(currentCell != null) myTable.ScrollRectToVisible(currentCell.Cell.Frame, true);
});
Однако, когда я пытаюсь выполнить действие с этой ячейкой, чувствительное к текущему положению этой ячейки на экране (например, присоединение UIPopoverController), я обнаруживаю, что кадр этой ячейки показывает исходное местоположение до Изменение размера таблицы и прокрутка.
Я попробовал следующее, чтобы получить те же результаты, что и кадр, все еще указывающий на старое местоположение (многие из них экспериментировали, чтобы узнать, делали ли они что-нибудь, не зная, что будет работать, а что нет): *
- Использование SetNeedsLayout для ячейки, подпредставлений таблицы, таблицы.
- Использование LayoutIfNeeded для ячейки, подпредставлений таблицы, таблицы и представления, содержащего таблицу
- Несколько комбинаций SetNeedsLayout и LayoutIfNeeded
- Создает новый поток, спит в нем в течение смешного времени (чтобы пользовательский интерфейс мог выполнить перерисовку / обновление / что угодно), а затем смотрит на кадр
- порождая новый поток, спит в течение этого нелепого времени и затем вызывает различные функции макета
Я не уверен, что происходит смена размера или прокрутка.
Когда вы прокручиваете таблицу жестом, кажется, что кадры ячеек обновляются должным образом, потому что я всегда могу показать всплывающее окно в правильном месте относительно той ячейки, к которой я его прикрепляю. Поэтому я не понимаю, почему изменение размера таблицы и ее прокрутка программным способом не могут сделать то же самое.
Кто-нибудь знает, как заставить UITableView обновлять кадры своих ячеек, не делая ReloadData (ReloadData вызывает много нежелательных эффектов в этом случае)?