ScrollView 图片addSubview 问题

ScrollView image addSubview issue

我正在尝试在 ScrollView 中添加一个 imageView,但我总是将 ScrollView 设为空。请问我的问题在哪里?虽然我添加了委托方法 <UIScrollViewDelegate> 也在故事板中建立了连接。

我的代码:

- (void) viewDidLoad {    
    [super viewDidLoad];
    [self slider];
}

-(void) slider {

    _scrlView = [[UIScrollView alloc]init];    
    _scrlView.backgroundColor = [UIColor blackColor];
    _scrlView.pagingEnabled = YES;
    _scrlView.delegate = self;
    _scrlView.showsHorizontalScrollIndicator = false;
    _scrlView.layer.cornerRadius = 2;
    _scrlView.contentSize = CGSizeMake(_scrlView.frame.size.width * 3, _scrlView.frame.size.height);

    _img1 = [[UIImageView alloc] initWithFrame:CGRectMake((_scrlView.frame.size.width*0),0,_scrlView.frame.size.width,_scrlView.frame.size.height)];
    _img2 = [[UIImageView alloc] initWithFrame:CGRectMake((_scrlView.frame.size.width*1),0,_scrlView.frame.size.width,_scrlView.frame.size.height)];
    _img3 = [[UIImageView alloc] initWithFrame:CGRectMake((_scrlView.frame.size.width*2),0,_scrlView.frame.size.width,_scrlView.frame.size.height)];

    _img1 = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"1234.jpg"]];
    _img2 = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"1234.jpg"]];
    _img3 = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"1234.jpg"]];

    [_scrlView addSubview:_img1];
    [_scrlView addSubview:_img2];
    [_scrlView addSubview:_img3];
}

首先,您没有将 scrollView 添加到任何视图,因此它不会显示在屏幕上。

二、这个:

_scrlView = [[UIScrollView alloc]init];

CGRectZero 创建一个 scrollView 就像写一样:

_scrlView = [[UIScrollView alloc] initWithFrame:CGRectMake(0,0,0,0)];

这意味着 contentSize 也是 CGRectZero

编辑:如果您不想覆盖 scrollView 的创建(因为您已经在 Interface Builder 中设置了它),请删除行 _scrlView = [[UIScrollView alloc]init];。 但是如果你在故事板中使用自动布局,你应该在 viewDidLayoutSubviews.

中调用 [self slider]

您需要先设置框架,以获取其宽度和高度,

- (void)viewDidLoad {

    [super viewDidLoad];

    [self slider];
}

-(void)slider{
   _scrlView = [[UIScrollView alloc] initWithFrame:CGRectMake(YOUR_X, YOUR_X, YOUR_WIDTH, YOUR_HIEGHT)]; 
   // do this if you have not added Scrollview in storyboard, if Added, then no need to invoke, init by line [[UIScrollView alloc] init] ;
    ...
    ...
   [self.view addSubview:_scrlView];
}

我建议再做一件事,从 UIView

viewDidAppear 方法调用您的 slider 方法

享受编码!!

如果没有使用storyboard,需要分配ScrollView。同样在这种情况下,指定一个框架:

_scrlView = [[UIScrollView alloc] initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height)];

您正在重新分配imageviews,分配一次后尝试设置image。

另一件事:不要再次初始化滚动视图。

- (void)viewDidLoad {

[super viewDidLoad];

[self slider];
}

-(void)slider{

_scrlView.backgroundColor = [UIColor blackColor];
_scrlView.pagingEnabled = YES;
_scrlView.delegate = self;
_scrlView.showsHorizontalScrollIndicator = false;
_scrlView.layer.cornerRadius = 2;
_scrlView.contentSize = CGSizeMake(_scrlView.frame.size.width * 3, _scrlView.frame.size.height);

_img1 = [[UIImageView alloc] initWithFrame:CGRectMake((_scrlView.frame.size.width*0),0,_scrlView.frame.size.width,_scrlView.frame.size.height)];
_img2 = [[UIImageView alloc] initWithFrame:CGRectMake((_scrlView.frame.size.width*1),0,_scrlView.frame.size.width,_scrlView.frame.size.height)];
_img3 = [[UIImageView alloc] initWithFrame:CGRectMake((_scrlView.frame.size.width*2),0,_scrlView.frame.size.width,_scrlView.frame.size.height)];

[_img1 setImage:[UIImage imageNamed:@"1234.jpg"]];
[_img2 setImage:[UIImage imageNamed:@"1234.jpg"]];
[_img3 setImage:[UIImage imageNamed:@"1234.jpg"]];

[_scrlView addSubview:_img1];
[_scrlView addSubview:_img2];
[_scrlView addSubview:_img3];
}

我的回复是

  • 如果您没有使用 Storyboard 或 Interface builder ,也未选中自动布局,请在分配后设置 uiscrollview 的框架,并对一张图像仅使用一次 alloc init 。在 scrollview 上添加图像,在 superview 上添加 scrollview

  • 如果您没有使用 Storyboard 或 Interface builder 并且选中了自动布局,则对滚动视图和图像视图设置适当的约束。读这个

https://developer.apple.com/library/ios/technotes/tn2154/_index.html