如何使用UIView和autolayout绘制水平线?

时间:2015-04-30 20:51:29

标签: ios objective-c autolayout

以下是我的代码......这是一个简单的问题......也许我不应该用UIView来做...但我只是想画一条装饰水平线来分隔内容。我得到的是没有错误,线条没有绘制。如果我使用框架启动它并关闭自动布局,那么我确实看到了这条线但是我不想实现它,因为一切都是自动布局。

在viewDidLoad下面调用其他方法来创建UI元素并添加约束。

- (void)viewDidLoad {
    [super viewDidLoad];

    // Add main layout
    [self.scrollView addSubview:self.profileInfoContainer];

    // Add UI elements
    [self.profileInfoContainer addSubview:self.email];
    [self.profileInfoContainer addSubview:self.userName];
    [self.profileInfoContainer addSubview:self.hLineSeperator];
    [self.profileInfoContainer addSubview:self.navigationContainer];

    // Add Constraints
    [self addInfoContainerConst];

}  

下面我在profileInfoContainer中添加所有ui元素的约束,包括hLineSeperator

- (void)addInfoContainerConst {

        // Add constrains
        NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(_userName, _email, _hLineSeperator, _navigationContainer);
        NSDictionary *metrics = @{
                                  @"vTop":@60,
                                  @"vBttm":@5,
                                  @"hLeft":@25,
                                  @"hRight":@25,
                                  @"vMiddle":@5
                                  };

        NSArray *constraint_POS_V = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-vTop-[_userName]-vMiddle-[_email]-vMiddle-[_hLineSeperator]-vMiddle-[_navigationContainer]|"
                                                                            options:0
                                                                            metrics:metrics
                                                                              views:viewsDictionary];

        NSArray *constraint_POS_H = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-hLeft-[_userName]-hRight-|"
                                                                            options:0
                                                                            metrics:metrics
                                                                              views:viewsDictionary];

        NSArray *constraint_POS_H_1 = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-hLeft-[_email]-hRight-|"
                                                                            options:0
                                                                            metrics:metrics
                                                                              views:viewsDictionary];

        NSArray *constraint_POS_H_2 = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_hLineSeperator(1)]|"
                                                                            options:0
                                                                            metrics:metrics
                                                                              views:viewsDictionary];

        NSArray *constraint_POS_H_3 = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_navigationContainer]|"
                                                                              options:0
                                                                              metrics:metrics
                                                                                views:viewsDictionary];

        [self.profileInfoContainer addConstraints:constraint_POS_V];
        [self.profileInfoContainer addConstraints:constraint_POS_H];
        [self.profileInfoContainer addConstraints:constraint_POS_H_1];
        [self.profileInfoContainer addConstraints:constraint_POS_H_2];
        [self.profileInfoContainer addConstraints:constraint_POS_H_3];
    }    

下面是创建用于绘制线

的UIView的方法
    - (UIView*)hLineSeperator {
        if (!_hLineSeperator) {
            _hLineSeperator = [UIView new];
            _hLineSeperator.translatesAutoresizingMaskIntoConstraints = NO;
            _hLineSeperator.backgroundColor = [UIColor grayColor];
        }
        return _hLineSeperator;
    }

1 个答案:

答案 0 :(得分:0)

不需要在代码中创建的子视图(特别是您想要创建的子视图)中添加约束。你可以这样做,

UIView *horizontalSeperatorViewOnTop = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.(yourView).frame.size.width, 0.5f)];
horizontalSeperatorViewTop.backgroundColor = [UIColor lightGrayColor];
[self.(yourView) addSubview: horizontalSeperatorViewOnTop];

我一直在我的代码中为水平或垂直分隔符执行此操作并且效果很好!