uiscrollview怎么添加约束

uiscrollview怎么添加约束,第1张

用xcode创建一个新工程,然后打开ViewController.m文件

我们在ViewController的viewDidLoad方法里创建一个UIScrollView并且加上约束

代码如下:

//创建scrollView

UIScrollView * scrollView=[[UIScrollView alloc] init]

scrollView.translatesAutoresizingMaskIntoConstraints=NO

scrollView.backgroundColor=[UIColor lightGrayColor]

[self.view addSubview:scrollView]

//给它加上约束 使它距屏幕的上左下右都是20像素

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20-[scrollView]-20-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(scrollView)]]

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[scrollView]-20-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(scrollView)]]

效果如图

我要再创建两个view 这两个view的大小和scrollview的大小一样大,使scrollview能横向滚动

代码如下:

//添加约束 (非常重要)

//1.水平方向排开 宽度相等 上下边缘对齐(等高)

[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[redView]-0-[blueView(==redView)]-0-|" options:NSLayoutFormatAlignAllTop | NSLayoutFormatAlignAllBottom metrics:nil views:NSDictionaryOfVariableBindings(redView,blueView)]]

//2.垂直方向一直撑到父视图的

[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[redView]-0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(redView)]]

//到了这里 还没完 如果是普通的view 那就搞定了 但是scrollview不一样还得添加下面两个约束

//3.redview的宽高 和scrollview的宽高相等的约束

[scrollView addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:scrollView attribute:NSLayoutAttributeWidth multiplier:1.0 constant:0]]

[scrollView addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:scrollView attribute:NSLayoutAttributeHeight multiplier:1.0 constant:0]]

整个viewdidload全部代码如下:

- (void)viewDidLoad

{

[super viewDidLoad]

//创建scrollView

UIScrollView * scrollView=[[UIScrollView alloc] init]

scrollView.translatesAutoresizingMaskIntoConstraints=NO

scrollView.backgroundColor=[UIColor lightGrayColor]

[self.view addSubview:scrollView]

//给它加上约束 使它距屏幕的上左下右都是20像素

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20-[scrollView]-20-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(scrollView)]]

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[scrollView]-20-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(scrollView)]]

//创建redView

UIView * redView=[[UIView alloc] init]

redView.backgroundColor=[UIColor redColor]

redView.translatesAutoresizingMaskIntoConstraints=NO

[scrollView addSubview:redView]

//创建blueView

UIView * blueView=[[UIView alloc] init]

blueView.backgroundColor=[UIColor blueColor]

blueView.translatesAutoresizingMaskIntoConstraints=NO

[scrollView addSubview:blueView]

//添加约束 (非常重要)

//1.水平方向排开 宽度相等 上下边缘对齐(等高)

[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[redView]-0-[blueView(==redView)]-0-|" options:NSLayoutFormatAlignAllTop | NSLayoutFormatAlignAllBottom metrics:nil views:NSDictionaryOfVariableBindings(redView,blueView)]]

//2.垂直方向一直撑到父视图的

[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[redView]-0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(redView)]]

//3.redview的宽高 和scrollview的宽高相等的约束

[scrollView addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:scrollView attribute:NSLayoutAttributeWidth multiplier:1.0 constant:0]]

[scrollView addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:scrollView attribute:NSLayoutAttributeHeight multiplier:1.0 constant:0]]

}

首先你要有个总控制器,管理UIScrollView的事件。将你想要添加的子页面,也就是子Controller的View添加到你这个scollView上面就可以了。代码就是[scrollView addSubview: subController.view]

首先,你要确保你scrollview的内容大小和contentSize的大小相符(最好不大不小)

如果1对了,还不能你的问题。那可能是要禁止边缘d动,实现如下

(1)当bounces属性设置为YES时,当UIScrollView中图片滑动到边界的时候会出现d动的效果,就像是Linux中的果冻效果一样。

(2)当bounces属性设置为NO时,当UIScrollView中图片滑动到边界时会直接定在边界就不会有d动的效果。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/7934935.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-11
下一篇2023-04-11

发表评论

登录后才能评论

评论列表(0条)

    保存