iOS ScrollView的使用教程

iOS ScrollView的使用教程

「这是我参与2022首次更文挑战的第39天,活动详情查看:2022首次更文挑战」。

前言

  • 自动布局:任何一个控件,都可以参照另外一个控件定义出准确的位置

为了让程序员能够将注意力集中在程序上,而不用在代码中过多的使用frame。

  • storyBoard快速布局方法:使用option键,进行拖拽实现控件的copy

I 什么是UIScrollView?

是一个能滚动的视图控件,可以用来展示大量的内容,且通过滚动可以查看所有内容

解决UIScrollView 无法滚动的方法

  1. 检查是否设置contentSize 属性

  2. 检查scrollEnabled 属性值是否=NO

  3. 检查userInteractionEnabled 是否为NO

II UIScrollView的常见属性

@property(nonatomic) CGPoint contentOffset; //这个属性用来表示UIScrollView滚动的位置
@property(nonatomic) CGSize contentSize; //这个属性用来表示UIScrollView内容的尺寸,滚动范围(能滚多远)
@property(nonatomic) UIEdgeInsets contentInset; //这个属性能够在UIScrollView的4周增加额外的滚动区域
复制代码

在使用contentSize、contentInset、contentOffset的setter方法的时候,要注意先后顺序;

想要准确的调整offset的话,可以先设置inset->size;或者是:size->offset

  1. contentSize 会根据ContentInset调整offset--除了赋值,还实现了其他动作

  2. contentInset不会根据contentSize调整offset--单纯给属性赋值

setter方法的实现差别(可采用设置断点进行查看)

#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@property (weak, nonatomic) IBOutlet UIButton *lastButton;
@end
@implementation ViewController
 
/**
 
 1.--setter方法的实现差别
 
 contentSize 会根据ContentInset调整offset--除了赋值,还实现了其他动作
 
 contentInset不会根据contentSize调整offset--单纯给属性赋值
 */
 
- (void)viewDidLoad {
 
    [super viewDidLoad];
 
    //1.设置间距:只是指定内容外侧的边距,并不会根据contentSize自动调整contentOffset
 
    [self.scrollView setContentInset:UIEdgeInsetsMake(64, 0, 0, 0)];
 
    //2.  设置滚动视图内容大小
 
    //1> 若有间距contentInset,根据间距自动调整contentOffset
 
    //2> 若无contentInset,contentOffset是(0,0)
    [self.scrollView setContentSize:CGSizeMake(0, CGRectGetMaxY(self.lastButton.frame)+10)];//CGRectGetMaxY(self.lastButton.frame)+10) 是为了能更清楚的显示最后一个按钮
    //3.设置偏移位置
    [self.scrollView setContentOffset:CGPointMake(0, -64)];
}
@end
复制代码
  • UI Scrollview 的缩放

在simulator上面操作缩放:按住option键即可

III 代理实现的步骤

3.1 代理的作用是什么?

  1. 代理设计模式,在oc中使用最为广泛的一种设计模式;主要用来负责在两个对象之间,发生某些事件时,来传递消息或者数据

  2. 监听哪些“不能通过addTarget方式监听“的事件

3.2 背景

  1. 目标:想再UIScrollView的正在滚动状态、滚动到某位置、停止滚动状态时做一些特定的动作

  2. 前提:监听UIScrollView 的滚动过程(事件)

  3. 实现方法:通过给UIScrollView 设置delegate对象,当UIScrollView发生一系列滚动的时候,会自动通知(发生特定消息亦即方法调用)它的代理对象

  4. 成为delegate 对象的条件:遵守UIScrollViewDelegate的协议,并实现对应方法 --通常将UIScrollView 所在的ViewController设置为它的delegate对象

这里写图片描述

3.3 设置UIScrollView 的delegate属性的两种方法:

  1. 通过代码实现:

使用修改scrollView对象的属性方式添加delegate

self.scrollView.delegate = self;

复制代码
  1. 通过storyBoard的拖线

3.4 delegate 的例子:控制器希望知道用户输入的每一个字符

这里写图片描述

3.5 代理实现的步骤小结

  1. 成为(子)控件的代理;--父亲(视图控制器)成为儿子(textField)的代理

  2. 遵守协议-->目的是利用Xcode的智能提示功能,快速编写代码--这个步骤可选

  3. 实现协议方法

协议是由控件定义的,因为只有控件自己本身最了解自己内部发生的事件。

see also

🍅 联系作者: iOS逆向(公号:iosrev)


🍅 作者简介:CSDN 博客专家认证🏆丨全站 Top 50、华为云云享专家认证🏆、iOS逆向公号号主


🍅 简历模板、技术互助。关注我,都给你。

分类:
iOS
标签: