2016-06-11 3 views
0

Я пытаюсь использовать множители на макете iCarousel, но они, похоже, вообще не затрагивают. Это мой код:Вопрос о множителе автозапуска iCarousel

_carousel = [[iCarousel alloc]init ]; 
self.items = [NSMutableArray array]; 
for (int i = 0; i < 10; i++) 
{ 
    [_items addObject:@(i)]; 
} 
_carousel.type = iCarouselTypeCylinder; 

_carousel.delegate = self; 
_carousel.dataSource = self; 

_carousel.translatesAutoresizingMaskIntoConstraints = false; 

[self.view addSubview:_carousel]; 

[_carousel.centerXAnchor constraintEqualToAnchor:self.view.layoutMarginsGuide.centerXAnchor].active = true; 
[_carousel.bottomAnchor constraintEqualToAnchor:self.view.layoutMarginsGuide.bottomAnchor constant:-80].active = true; 

[_carousel.widthAnchor constraintEqualToAnchor:self.view.widthAnchor multiplier:40.0/100.0].active = true; 
[_carousel.heightAnchor constraintEqualToAnchor:self.view.heightAnchor multiplier:30.0/100.0].active = true; 

Я также заметил, что если ввести постоянное значение сказать -20 в:

[_carousel.bottomAnchor constraintEqualToAnchor:self.view.layoutMarginsGuide.bottomAnchor constant:-20].active = true; 

iCarousel падает значительно ниже просмотров нижнего якоря и я не» Знаешь почему?

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

ответ

0

Вы должны переопределить и переместить свой код на loadView, чтобы избежать создания механизма автоматического компоновки генерации прототипов. Например:

- (void) loadView 
{ 
    [super loadView]; 

    _carousel = [[iCarousel alloc]init ]; 
    self.items = [NSMutableArray array]; 
    for (int i = 0; i < 10; i++) 
    { 
     [_items addObject:@(i)]; 
    } 
    _carousel.type = iCarouselTypeCylinder; 

    _carousel.delegate = self; 
    _carousel.dataSource = self; 

    _carousel.translatesAutoresizingMaskIntoConstraints = false; 

    [self.view addSubview:_carousel]; 

    [_carousel.centerXAnchor constraintEqualToAnchor:self.view.layoutMarginsGuide.centerXAnchor].active = true; 
    [_carousel.bottomAnchor constraintEqualToAnchor:self.view.layoutMarginsGuide.bottomAnchor constant:-80].active = true; 

    [_carousel.widthAnchor constraintEqualToAnchor:self.view.widthAnchor multiplier:40.0/100.0].active = true; 
    [_carousel.heightAnchor constraintEqualToAnchor:self.view.heightAnchor multiplier:30.0/100.0].active = true; 
} 

В общем loadView где вы хотите добавить подвидов программно в UIViewController подкласса.

+0

Спасибо за это :) Не могли бы вы помочь мне с вопросом, пожалуйста? – sharp

+0

Вы пробовали этот код? Это фиксированное автоматическое макетирование для меня при запуске вашего кода, в качестве ограничений прототипа, в результате чего ограничения автоматического макета ломаются. Где код, который я опубликовал в вашем жизненном цикле 'UIViewController' или' UIView'? – beyowulf

+0

Я не использую IB, поэтому ограничений прототипирования нет. Эти блоки кода (constraintEqualToAnchor: множители) работают правильно в другом месте программы, но не на iCarousel. Я не могу поместить этот код в loadView, потому что в моей программе настройка iCarousel происходит после загрузки представления и на основе условного. ICarousel позиционируется центральными и нижними якорями, но множитель не имеет эффекта, в результате iCarousel имеет одинаковый размер в точках на всех устройствах, чего я не хочу. Я хочу, чтобы он изменял размер соответственно на разных размерах экрана – sharp