автоматически AdjustsScrollViewInsets не работает

Ваша переменная ids будет построена из «строк», а не ObjectId значений.

Мангустировать «autocasts» строковые значения для ObjectId в их правильный тип в регулярных запросах, но это не происходит в конвейере агрегации , как описано в номере № 1399.

Вместо этого вы должны выполнить правильное литье, чтобы ввести вручную:

ids = ids.map(function(el) { return mongoose.Types.ObjectId(el) })

Затем вы можете использовать их в своем конвейере:

{ "$match": { "_id": { "$in": ids } } }

Причина в том, что конвейеры агрегации «обычно» изменяют структуру документа, и поэтому mongoose не делает никаких предположений о том, что «схема» применяется к документу на любой стадии конвейера.

Можно утверждать, что этап «первого» конвейера, когда это этап $match, должен сделать это, поскольку документ действительно не изменяется. Но сейчас это не так.

Любые значения, которые могут быть «строками» или, по крайней мере, не корректным типом BSON, должны быть вручную отобраны для соответствия.

29
задан Pang 15 September 2017 в 07:54
поделиться

6 ответов

Я думаю, что automaticallyAdjustsScrollViewInsets работает только тогда, когда ваши контроллеры view - это UIScrollView (табличное представление - одно).

Похоже, у вас проблема в том, что view вашего контроллера является обычным UIView, а ваш UITableView - просто подпредставлением, поэтому вам придется либо:

  • Сделайте просмотр таблицы «корневым».

  • Настроить вставки вручную:

    UIEdgeInsets insets = UIEdgeInsetsMake(controller.topLayoutGuide.length,
                                           0.0,
                                           controller.bottomLayoutGuide.length,
                                           0.0);
    scrollView.contentInset = insets;
    

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

Похоже, SDK способен регулировать некоторые виды прокрутки несмотря на то, что он не является корневым представлением контроллера.

Пока что он работает с UIScrollView и UIWebView scrollView, когда они являются подпредставлением по индексу 0.

В любом случае, это может измениться в будущих выпусках iOS, так что вы более безопасно настраиваете вставки сами.

54
ответ дан Rivera 15 September 2017 в 07:54
поделиться

Ваш контроллер представления должен находиться непосредственно в стеке UINavigaitonController, чтобы automaticallyAdjustsScrollViewInsets работал (т. Е. Не дочерний контроллер представления)

Если это дочерний контроллер представления другого контроллера представления, который находится в стеке навигации вместо этого вы можете установить automaticallyAdjustsScrollViewInsets = NO для родителя. В качестве альтернативы вы можете сделать это:

self.parentViewController.automaticallyAdjustsScrollViewInsets = NO;
19
ответ дан Robert 15 September 2017 в 07:54
поделиться

Я знаю, что этот пост немного стар, но я только что решил эту проблему с iOS 11 и swift 4, моя текущая проблема заключалась в том, что у iOS11 есть новое свойство для проверки вставок, когда ScrollView действительно существует, это contentInsetAdjustmentBehavior , который является свойством ScrollView, а свойство по умолчанию - automatic, поэтому мой код был:

if #available(iOS 11, *) {
    myScroll.contentInsetAdjustmentBehavior = .never
} else {
    self.automaticallyAdjustsScrollViewInsets = false
}

Надеюсь, это тоже решит ваши проблемы ...

15
ответ дан DariusV 15 September 2017 в 07:54
поделиться

У меня была та же проблема - табличное представление с нежелательным заполнением верхней части.

Во всех ответах говорится, что нужно исправить, установив automaticallyAdjustsScrollViewInsets = NO, но это не устранило отступы для меня.

Подобно другим ответам, приведенным здесь, эти направления необходимо немного изменить, если вы используете нестандартную иерархию представлений.

У меня был UIViewController со встроенным UITableViewController. Не удалось установить automaticallyAdjustsScrollViewInsets на контроллере табличного представления.

Вместо этого я установил automaticallyAdjustsScrollViewInsets = NO на родительском UIViewController, который встраивал мой контроллер табличного представления. Это успешно устранило отступы в представлении таблицы.

2
ответ дан pkamb 15 September 2017 в 07:54
поделиться
self.textView.contentInset = UIEdgeInsetsMake(1.0,0.0,0,0.0);
[self setEdgesForExtendedLayout:UIRectEdgeNone];
-4
ответ дан Artur 15 September 2017 в 07:54
поделиться

У меня есть эта иерархия:

  1. пользовательский навигационный контроллер содержит пользовательский tabbarcontroller

  2. пользовательский tabbarcontroller содержит несколько контроллеров

  3. эти контроллеры содержат подпредставления, а один из них содержит подкласс uiscrollview.

Мне пришлось автоматически установить для ADjustsScrollViewInsets значение NO

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    self.automaticallyAdjustsScrollViewInsets = NO;

в пользовательском tabbarcontroller . Другие контроллеры в иерархии не влияют на поведение вложенной прокрутки.

2
ответ дан Vladimír Slavík 15 September 2017 в 07:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: