2016-05-05 14 views
0

Ich habe UIScrollView mit UIView (als ContentView) mit UITableView und zwei UIWebView (siehe img). Ich muss es auf ViewController legen.Fügen Sie Einschränkungen für ScrollView von Xib

Wie ich es jetzt tun:

OrderInfoScrollView *newView = [[OrderInfoScrollView alloc] loadObject]; 
[self.view addSubview:newView]; 

und init sieht aus wie:

- (OrderInfoScrollView *)loadObject { 
    OrderInfoScrollView *result = nil; 
    NSArray* elements = [[NSBundle mainBundle] loadNibNamed: @"OrderInfoView" owner:self options: nil]; 
    for (id anObject in elements) 
    { 
     if ([anObject isKindOfClass:[self class]]) 
     { 
      result = anObject; 
      break; 
     } 
    } 

    return result; 
} 

Es funktioniert gut, aber ich kann nicht Einschränkungen für diese hinzufügen. Ich brauche equal width to self.view, leading space = 3, top margin = 0.

Ich habe versucht, das schon:

UIView *superView = self.OrderInfoView; 
[superView addSubview:newView]; 
NSDictionary *views = NSDictionaryOfVariableBindings(superView, newView); 
NSArray *equalWidthConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"[newView]" options:0 metrics:nil views:views]; 
NSArray *verticalConstraints =[NSLayoutConstraint 
//NSArray *equalWidthConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"[newView(==superView)]" options:0 metrics:nil views:views]; 
NSArray *verticalConstraints =[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[newView]" options:0 metrics:nil views:views]; 
NSArray *horizontalConstraints =[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[newView]" options:0 metrics:nil views:views]; 

[superView addConstraints:equalWidthConstraints]; 
[superView addConstraints:horizontalConstraints]; 
[superView addConstraints:verticalConstraints]; 

Und so etwas wie dieses:

NSLayoutConstraint *constraint = [NSLayoutConstraint 
             constraintWithItem:newView 
             attribute:NSLayoutAttributeWidth 
             relatedBy:NSLayoutRelationEqual 
             toItem:self.view 
             attribute:NSLayoutAttributeWidth 
             multiplier:1.0f 
             constant:0.0f]; 

[self.view addConstraint:constraint4]; 

Auch habe ich versucht, zusätzliche UIView zu setzen und meine Ansicht blättern diese in den (nicht helfen). Die Struktur war wie folgt aus:

-UIView 
--UIView 
---UIScrollView 

Ich versuchte setTranslatesAutoresizingMaskIntoConstraints:NO und neuen Ansatz, aber in diesem Fall meine UIScrollView gar nicht erscheinen.

[newView setTranslatesAutoresizingMaskIntoConstraints:YES]; 
NSLayoutConstraint *width =[NSLayoutConstraint 
          constraintWithItem:newView 
          attribute:NSLayoutAttributeWidth 
          relatedBy:0 
          toItem:self.view 
          attribute:NSLayoutAttributeWidth 
          multiplier:1.0 
          constant:0]; 
[self.view addConstraint:width]; 

Irgendwelche Idee? Ich muss wirklich diese UIScrollView wiederverwenden.

Nib with UIScrollView

Antwort

0

Es war ein langer Weg, aber ich es. Ich mache separate Xib für UIView (a.k.a ContentView), setzen Sie Einschränkungen für alle UIViews, dass first is top margin = 0 und die last one margin bottom = 0. setTranslatesAutoresizingMaskIntoConstraints: NO für ContentView und für alle Ansichten darin. Init auf diese Weise:

OrderInfoView *contentView = [[OrderInfoView alloc] loadObject]; 
[self.orderInfoScrollView addSubview:contentView]; 

UIView *superView = self.orderInfoScrollView; 
OrderInfoView *newView = contentView; 
UIView *megaView = self.view; 
NSDictionary *views = NSDictionaryOfVariableBindings(superView, newView, megaView); 
NSArray *verticalConstraints =[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[newView]|" options:0 metrics:nil views:views]; 
NSArray *horizontalConstraints =[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[newView]|" options:0 metrics:nil views:views]; 

[superView addConstraints:horizontalConstraints]; 
[superView addConstraints:verticalConstraints]; 

[newView setTranslatesAutoresizingMaskIntoConstraints:NO]; 
NSLayoutConstraint *width =[NSLayoutConstraint 
          constraintWithItem:newView 
          attribute:NSLayoutAttributeWidth 
          relatedBy:0 
          toItem:megaView 
          attribute:NSLayoutAttributeWidth 
          multiplier:1.0 
          constant:0]; 
[megaView addConstraint:width]; 

Ich hoffe, es wird für jemanden nützlich sein.