I have UIScrollView
with UIView
(as ContentView) with UITableView
and two UIWebView
(see img). I need to place it to ViewController.
How I do it now:
OrderInfoScrollView *newView = [[OrderInfoScrollView alloc] loadObject];
[self.view addSubview:newView];
and init looks like:
- (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;
}
It works fine, but I can't add constraints for this. I need to equal width to self.view, leading space = 3, top margin = 0
.
I've already tried this:
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];
And something like this:
NSLayoutConstraint *constraint = [NSLayoutConstraint
constraintWithItem:newView
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeWidth
multiplier:1.0f
constant:0.0f];
[self.view addConstraint:constraint4];
Also, I tried to place additional UIView
and add my scroll view to this (didn't help). The structure was like this:
-UIView
--UIView
---UIScrollView
I tried to setTranslatesAutoresizingMaskIntoConstraints:NO
and new approach, but in this case my UIScrollView
doesn't appear at all.
[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];
Any idea? I really need to reuse this UIScrollView
.
It was a long way, but I get it. I make separate xib for UIView
(aka ContentView
), set constraints to all UIViews
, that first is top margin = 0
and the last one margin bottom = 0
. setTranslatesAutoresizingMaskIntoConstraints: NO
for ContentView
and for all views inside it. Init this in this way:
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];
Hope it will be useful for someone.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.