ios7: uicollectionview появляется под uinavigationbar

<p>я уже некоторое время собираюсь на ios 7, но мне еще предстоит решить эту проблему, у меня есть несколько представлений с включенной автоматической раскладкой, которые были созданы в раскадровке и отображаются со стандартной <code>uinavigationcontroller</code>. большинство в порядке, но те, которые основаны на <code>uicollectionview</code>, всегда размещаются под панелью навигации, если я не установил прозрачность на <code>no</code>. я попробовал трюк <code>edgesextended</code>, но это, похоже, не решает его, я не обязательно возражаю против выключения прозрачности, но я бы хотел решить его чище. </p>

<p>у меня была эта проблема раньше, просто установите краевые отступы представления коллекции с верхним полем:</p><pre><code> [self.mycollectionvc.collectionview setcontentinset:uiedgeinsetsmake(topmargin, 0, 0, 0)]; </code></pre><p>где topmargin - это размер навигационной панели или любой другой точки, в которой вы хотите, чтобы коллекция начала прокручиваться.</p><p>таким образом, представление вашей коллекции начнет прокручиваться чуть ниже панели навигации, и в то же время заполнит весь экран, и вы увидите его, если ваша навигационная панель полупрозрачна.</p>

<p>к вашему сведению, если ваш uicollectionview является корневым представлением в иерархии вашего контроллера представления, и для вашего контроллера представления для <code>automaticallyadjustsscrollviewinsets</code> установлено значение yes (это значение по умолчанию), тогда contentinset должен обновляться автоматически. </p><p>тем не менее, contentinset scrollview обновляется автоматически только в том случае, если ваш scrollview (или кстати tableview/collectionview/webview) является первым представлением в иерархии контроллера их представления.</p><p>я часто добавляю uiimageview первым в моей иерархии, чтобы получить фоновое изображение. если вы сделаете это, вы должны вручную установить edge вставки в scrollview в viewdidlayoutsubviews:</p><pre><code>- (void) viewdidlayoutsubviews { [super viewdidlayoutsubviews]; cgfloat top = self.toplayoutguide.length; cgfloat bottom = self.bottomlayoutguide.length; uiedgeinsets newinsets = uiedgeinsetsmake(top, 0, bottom, 0); self.collectionview.contentinset = newinsets; } </code></pre>

<p>у меня была эта проблема после ios 11, просто установите для contentinsetadjustmentbehavior uicollectionview значение <i>никогда</i>:</p><pre><code>self.collectionview.contentinsetadjustmentbehavior = .never </code></pre>

<p>я использую swift и xcode 7.3.1. я решил это, перейдя на раскадровку и выбрав мой навигационный контроллер, а затем сняв флажок «расширить края» «под верхними планами».</p>

<pre><code>-(void) viewdidload{ [super viewdidload]; self.automaticallyadjustsscrollviewinsets = no; //added important } - (void) viewdidlayoutsubviews { [super viewdidlayoutsubviews]; cgfloat top = self.toplayoutguide.length; cgfloat bottom = self.bottomlayoutguide.length; uiedgeinsets newinsets = uiedgeinsetsmake(top, 0, bottom, 0); self.collectionview.contentinset = newinsets; } </code></pre>