Xcode 6 beta4, UIButton не отвечает за коллекциюviewcell
-
20-12-2019 - |
Вопрос
Я использую Xcode 6.0 beta 4 и обнаружил, что кнопки в UICollectionViewCell
это не ответ на нажатие.
Подробности как:
UICollectionViewController
--- UICollectionViewCell
------ UIButton
(UIButton
имеет два autolayout
ограничения, чтобы поставить UIButton
в вертикальном центре и горизонтальном центре в Cell
)
Теперь сделайте cell
размер что-то вроде:(300, 1000)
Запустите приложение в симуляторе iPhone или на устройстве с iOS 7.0 или 7.1.x, кнопка недоступна для прикосновения, но протестируйте в симуляторе iOS 8.0, все в порядке.Также, если я поменяю ячейку size
к (300, 200)
, кнопка работает.
Я думаю, что это ошибка в этой бета-версии Xcode, верно?
И где я могу сообщить об ошибке Apple?
Решение
Они забыли установить autoresizingMask для contentView UICollectionViewCell.
это исправить
self.contentView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
Другие советы
Похоже, что на самом деле это не ошибка, а проблема несовместимости устройств iOS 7 с использованием Xcode 6. пост экотакса описывает это более подробно, а вот ответ Apple DTS:
В iOS 7 размеры представлений содержимого ячеек изменялись с помощью масок автоматического изменения размера.В iOS 8 это было изменено: ячейки перестали использовать маски автоматического изменения размера и начали изменять размер представления содержимого в макетеSubviews.Если перо закодировано в iOS 8, а затем декодировано в iOS 7, у вас будет представление контента без маски автоматического изменения размера и других средств для изменения размера.Поэтому, если вы когда-нибудь измените рамку ячейки, представление содержимого не изменится.
Приложениям, которые развертываются обратно на iOS 7, придется обойти эту проблему, изменив размер самого представления контента, добавив маски автоматического изменения размера или добавив ограничения.
Решение Алексея выше поможет:
- (void)awakeFromNib
{
// Fix for iOS 7 devices targeted using Xcode 6.
self.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
}