2016-06-11 11 views
0

Ich versuche, die Multiplikatoren auf dem iCarousel Layout zu verwenden, aber sie scheinen überhaupt keinen Einfluss zu haben. Dies ist mein Code:iCarousel AutoLayout Multiplikator Ausgabe

_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; 

ich auch, dass in -20 sagt ein konstanter Wert von den, wenn ein Eingang bemerkt habe:

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

Bodenanker der iCarousel fällt deutlich unter den Ansichten und I don‘ Warum nicht?

Kann jemand diese bitte beantworten, verzeih mir, wenn ich irgendetwas übersehen habe, wie ich zu programmatischen Layouts neu bin.

Antwort

0

Sie sollten Ihren Code überschreiben und auf loadView verschieben, um zu vermeiden, dass die automatische Layout-Engine Prototyping-Einschränkungen generiert. Zum Beispiel:

- (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; 
} 

Im Allgemeinen loadView ist, wo Sie Subviews hinzufügen programmatisch zu einer UIViewController Unterklasse wollen.

+0

Vielen Dank dafür :) Können Sie mir bei der Frage bitte helfen? – sharp

+0

Haben Sie diesen Code versucht? Dieses fixierte automatische Layout ist für mich bei der Ausführung Ihres Codes problematisch, da die Einschränkungen für das automatische Layout dazu führen, dass die automatischen Layouteinschränkungen unterbrochen werden. Wo ist der Code, den ich in Ihrem 'UIViewController'- oder' UIView'-Lebenszyklus gepostet habe? – beyowulf

+0

Ich verwende kein IB, daher gibt es keine Einschränkungen für das Prototyping. Diese Codeblöcke (constraintEqualToAnchor: Multiplikatormethoden) funktionieren an anderer Stelle des Programms, aber nicht auf dem iCarousel. Ich kann diesen Code nicht in 'loadView' platzieren, da in meinem Programm das Setup des iCarousels nach dem Laden der Ansicht erfolgt und auf einer Bedingung basiert. Das iCarousel wird von den centerX- und bottom-Ankern positioniert, aber die Multiplikatoren haben keine Wirkung, was dazu führt, dass das iCarousel auf allen Geräten die gleiche Größe in Punkten hat, was ich nicht möchte. Ich möchte, dass es auf verschiedenen Bildschirmgrößen entsprechend skaliert – sharp

Verwandte Themen