【问题标题】:Add constraints for ScrollView from xib从 xib 为 ScrollView 添加约束
【发布时间】:2016-08-30 16:49:27
【问题描述】:

我有UIScrollViewUIView(作为ContentView)和UITableView和两个UIWebView(见img)。我需要把它放到 ViewController 中。

我现在怎么做:

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

初始化看起来像:

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

它工作正常,但我不能为此添加约束。我需要equal width to self.view, leading space = 3, top margin = 0

我已经试过了:

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

还有这样的:

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

[self.view addConstraint:constraint4];

另外,我尝试添加额外的UIView 并将我的滚动视图添加到此(没有帮助)。结构是这样的:

-UIView
--UIView
---UIScrollView

我尝试了setTranslatesAutoresizingMaskIntoConstraints:NO 和新方法,但在这种情况下我的UIScrollView 根本没有出现。

[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];

有什么想法吗? 我真的需要重用这个UIScrollView

【问题讨论】:

    标签: ios objective-c uiscrollview autolayout xib


    【解决方案1】:

    这是一个很长的路,但我明白了。我为UIView(又名ContentView)制作单独的xib,为所有UIViewsfirst is top margin = 0last one margin bottom = 0设置约束。 setTranslatesAutoresizingMaskIntoConstraints: NO 用于ContentView 以及其中的所有视图。以这种方式初始化:

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

    希望它对某人有用。

    【讨论】:

      猜你喜欢
      • 2020-04-01
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多