iOS开发 --UIScrollView添加xib自定义view

实现功能:3步注册流程,点击下一步进入下一个页面,填写信息。

实现思路:

1.由于需要在第一个注册页面添加“退出注册”的按钮,所以没有使用UINavigation实现。而是使用一个UIController。

2.三个注册页长度不同,所以将UIScrollView作为subView添加到VC的view中(UIScrollView的frame长宽写定)。

3.自定义三个UIView,当需要展示某个view时,根据此view的frame改变UIScrollview的contentViewSize

具体涉及到:

1.使用Xib自定义UIView子类(不与某一个VC关联)

frame指的是:该view在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统)

bounds指的是:

2.UIScrollView的frame:

UIView的三个基本属性

frame:是CGRect类型,该view在父view坐标系统中的位置和大小,改变视图的frame会改变center。(参照点是父亲的坐标系统)

center:是CGPoint 类型,指的就是整个视图的中心点,改变视图的center也会改变frame。(相对于父视图)

bounds:是CGRect类型,该view在本身坐标系统中 的位置和大小。(参照点是本身坐标系统)

UIScrollView的属性

contentSize:滚动试图所能展示的大小,也可以理解为滚动的区域。

scrollview.frame = (0,0,320,480);

scrollview.contentSize = (320,480*2);//可以上下滚动

scrollview.contentSize = (320*2,480);//可以左右滚动

因此我先在在VC的xib中确定了UIScrollView的frame。

而UIScrollView的contentSize需要根据其展示的view变化。

因为在xib定义view,并将其addSubview到srollview中,此时这个子视图并不会像平时VC的view一样,根据设备的大小具有合适的frame--关联到VC上的view。此时我们定义的“独立”的view,会根据Simulated Metrics中的size变化--因为它是被添加到某个UIScrollview中,它不会根据scrollview的frame.size.wildth确定自己的大小。反而是scrollview根据所展示的内容也就是这个view,确定自己的contentview。

因此在将subview添加到scrollview上之前,手动定义subview的frame,使其大小不由xib定义。

此处register2为自定义view

复制代码
#import "register2.h"
#import "Utils.h"
@implementation register2
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
 */
- (void)drawRect:(CGRect)rect {
   self.frame =CGRectMake(0, 0, MAIN_WIDTH, 750);
   self.nextBtn.layer.cornerRadius = 8;
   self.nextBtn.layer.masksToBounds = YES;  
}
复制代码

设置scrollView的contentSize,使其只可以上下滚动,滚动范围正好是子视图的大小。

 [self.scrollview setContentSize:CGSizeMake(self.secondView.frame.size.width, self.secondView.frame.size.height+200)];

这样即使子视图的Simulated Metrics中的size是iphone 5s,在iphone6p上运行效果仍是正确的。

原文地址:https://www.cnblogs.com/Anthea-i/p/4783869.html