Helpers - компьютеры, интернет, программирование

Подгонка подвида к его родителю?

У меня есть проблемный UIView, который называется MyListViewController. Это на первой вкладке в моем приложении.

Я добавляю подпредставление в раздел viewDidLoad (в подпредставлении определены некоторые ограничения). Когда я запускаю приложение, подпредставление не соответствует его корневому представлению. Однако, если я перейду на другую вкладку, а затем повторно щелкну на первой вкладке, приложение правильно впишется в подпредставление.

Также я не могу использовать [self.detailView setTranslatesAutoresizingMaskIntoConstraints:YES]; потому что это вызывает кучу конфликтов ограничений.

Во всяком случае, я написал свой собственный метод patchSubViewPadding, чтобы подогнать subView к его rootView, который определяется как detailView. Как я уже говорил выше, если я перейду к одной из других вкладок, а затем перейду к первой вкладке, приложение правильно отобразит подпредставление.

@interface MyListViewController ()

@property (strong, nonatomic) CustomViewController *customViewController;

@end

@implementation MyListViewController

- (void)viewDidLoad {
    [super viewDidLoad];

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    CustomViewController *viewController = (CustomViewController *)[storyboard instantiateViewControllerWithIdentifier:@"customView"];
    self.customViewController = viewController;

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
        [self.detailView addSubview:self.customViewController.view];
}

-(void)viewDidAppear:(BOOL)animated
{
    [CommonUtilities patchSubViewPadding:self.detailView subView:self.customViewController.view padding:0];
}

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    [CommonUtilities patchSubViewPadding:self.detailView subView:self.customViewController.view padding:0];
}

@end

И это мой собственный метод:

+(CGRect)patchSubViewPadding:(UIView *)superView subView:(UIView *)subView padding:(float)padding
{
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    {
        if (padding == 0)
            padding = -4.0f;

        CGRect frame = superView.bounds;

        frame.origin.y = 0;
        frame.size.width = frame.size.width - padding;
        subView.frame = frame;

        return subView.frame;
    }

    return subView.frame;
}

Я попробовал следующие свойства либо в viewDidLoad, либо в viewWillLayoutSubviews, но это не сработало.

[self.detailView setNeedsLayout];
[self.detailView setNeedsUpdateConstraints];

Любые идеи? Что я делаю неправильно?


Ответы:


1

Переместите вызов метода patchSubViewPadding: из viewDidAppear в конец viewDidLoad.

19.10.2014
  • Вызов patchSubViewPadding не находится в представленииWillAppear. Я также пробовал patchSubViewPadding в viewDidLoad, но ничего не изменилось. Почему я должен щелкнуть другую вкладку, а затем щелкнуть первую вкладку, чтобы увидеть установленное подпредставление? это странно.. 20.10.2014
  • попробуйте переместить [CommonUtilities patchSubViewPadding:self.detailView subView:self.customViewController.view padding:0]; в [self.detailView addSubview:self.customViewController.view]; в представленииDidLoad 20.10.2014
  • Новые материалы

    Интуитивное понимание тензоров в машинном обучении
    Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

    Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
    Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

    Почему объяснимость так важна прямо сейчас?
    По мере того, как системы искусственного интеллекта и инструменты на основе машинного обучения распространяются в нашей повседневной жизни, как практики, так и критики все чаще заявляют о..

    Анимированный математический анализ
    Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

    Создание простого слайдера изображений с помощью JavaScript
    Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

    Создание базы данных с помощью супергероя «Python»
    В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

    ИИ для чайников: руководство для начинающих по пониманию будущего технологий
    Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..