美文网首页
使用UIScrollView代替self.view

使用UIScrollView代替self.view

作者: a5da958858b8 | 来源:发表于2016-07-22 01:42 被阅读492次

有时候需要把一些很简单的页面做成可滑动的,比如这个简单的修改昵称的页面。

change_nickname.jpg =90x160 使用常规的UITableView 来实现显得有点笨重。所以我的做法是直接把ViewController底层的view (也就是self.view )替换成UIScrollView

1.初步试探

loadView方法里将self.view替换成UIScrollView,并且设置alwaysBounceVerticalYES

//将self.view替换成UIScrollView,使页面可以滑动
- (void)loadView {
    UIScrollView *scrollView = [UIScrollView new];
    scrollView.alwaysBounceVertical = YES;
 
    self.view = scrollView;
}

2.布局问题

但是此时子view的布局出现了问题。如截图所示:

layout_error.jpg
我是使用Masonry写的布局,其中textField的左边和self.view的左边对其,textField的右边和self.view的右边对其,如下代码所示:
[self.view addSubview:mTextField];
[mTextField mas_makeConstraints:^(MASConstraintMaker *make) {
    make.top.equalTo(self.view.mas_top);
    make.left.equalTo(self.view.mas_left);
    make.right.equalTo(self.view.mas_right);
    make.height.equalTo(@(TEXTFIELD_HEIGHT));
}];

但是很明显,我的textField并没有达到右对其的效果。

3.查找原因

后来在网上查到了原因,同时也埋怨自己对UIScrollView理解的不深入。

UIScrollView依靠与其subviews之间的约束来确定ContentSize的大小。

基于这篇文章(UIScrollview与Autolayout的那点事),我修改了自己的代码,如下:

layout_code_after_mpdified.png

稍微麻烦一点的是,以后不能再将view添加到self.view上,需要将其添加到containerView上。所以我添加了一个属性:

@property (nonatomic, strong) UIView *containerView;

并且实现了它的Getter方法:

- (UIView *)containerView {
    return [self.view.subviews firstObject];
}

以后就将view添加到self.containerView上并且设置约束就行了:

[self.containerView addSubview:mTextField];
[mTextField mas_makeConstraints:^(MASConstraintMaker *make) {
    make.top.equalTo(self.containerView.mas_top);
    make.left.equalTo(self.containerView.mas_left);
    make.right.equalTo(self.containerView.mas_right);
    make.height.equalTo(@(TEXTFIELD_HEIGHT));
}];

4.还有一点别的

以前实现一些长度超过屏幕范围的UIScrollView时,总是需要手动计算并设置contentSize
按照现在这种方法,就不必再计算contentSize了,只需要从上到下依次将子view添加进去并且设置好约束就可以了,UIScrollView会自己依据与子view的约束来计算contentSize

5.最后再重复一遍

UIScrollView依靠与其subviews之间的约束来确定ContentSize的大小。

其实其他情况也类似,在用自动布局实现UI时,若是不手动设置frameview也会根据内容或者子view的大小来确定自己的frame

相关文章

网友评论

      本文标题:使用UIScrollView代替self.view

      本文链接:https://www.haomeiwen.com/subject/kufijttx.html