3

我正在尝试以编程方式创建 UIScrollView。我设置一个属性并合成它。

@property (weak, nonatomic) IBOutlet UIScrollView *topScrollView;
@synthesize topScrollView;

然后我有一个方法可以做到这一点。

[topScrollView setFrame:CGRectMake(320, 0, 320, 65)];
[topScrollView setContentSize:CGSizeMake(500, 100)];
[topScrollView setBackgroundColor:[UIColor greenColor]];
[topScrollView setScrollEnabled:YES];
[topScrollView setShowsHorizontalScrollIndicator:YES];
[topScrollView setShowsVerticalScrollIndicator:NO];
[[self view] addSubview:topScrollView]; 

我把它放在 viewDidLoad 中。这不会创建滚动视图。我认为这是因为滚动视图尚未初始化。我可以在上述方法中进行分配和初始化,但是当我想在另一种方法中使用它时,它就不起作用了。我查看了Programmatically added UIScrollView used in multiple methods但没有太大帮助。可能有一个我不知道的简单解决方案。我该怎么做才能以编程方式创建这个滚动视图并能够在另一种方法中使用它(主要是用它来制作动画)。

谢谢,

伊万

4

4 回答 4

2

我认为这是因为滚动视图尚未初始化。

对。

我可以在上述方法中进行分配和初始化,但是当我想在另一种方法中使用它时,它就不起作用了。

如果您将新创建的滚动视图分配给属性或实例变量,它将如此。这就是他们的目的。

哦,另一件事。您需要确保以某种方式保留滚动视图。这意味着将您的topScrollView属性更改为strong,或将其添加到视图(然后将保留它),或两者兼而有之。

于 2013-06-20T21:04:31.567 回答
0

简单方法:如果需要,可以多次创建

- (void)scrollView
{

    int x = 0;
    int y = 10;
    for(int i=0; i<5; i++)
    {
        UIScrollView *scrollview=[[UIScrollView alloc]initWithFrame:CGRectMake(x, y, 50, 50)];
        scrollview.showsVerticalScrollIndicator=YES;
        scrollview.scrollEnabled=YES;
        scrollview.userInteractionEnabled=YES;
        scrollview.backgroundColor = [UIColor greenColor];
        [self.view addSubview:scrollview];
        //scrollview.contentSize = CGSizeMake(50,50);
        x=x+55;
    }
}
于 2013-11-14T13:15:34.093 回答
0

您可以使用以下代码在 yourView 上添加 UIScrollView :-

第1步:

Delegate "UIScrollViewDelegate" to your ViewController.h

for example:
  @interface yourViewController:UIViewController<UIScrollViewDelegate> 

第2步:

//create you UIScrollView
UIScrollView  *MyScrollVw= [[UIScrollView alloc]initWithFrame:CGRectMake(0 ,0 ,320 ,480)]; 
MyScrollVw.delegate= self;
[MyScrollVw setShowsHorizontalScrollIndicator:NO];
[MyScrollVw setShowsVerticalScrollIndicator:YES];
MyScrollVw.scrollEnabled= YES;
MyScrollVw.userInteractionEnabled= YES;
[yourView addSubview:MyScrollVw];
MyScrollVw.contentSize= CGSizeMake(320 ,1500);//(width,height)

第 3 步:

你想在 ViewController.m 中实现 scrollView Delegates

-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
   return imgView;
}
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
   NSLog(@"Did end decelerating");
   //do your code here
}   
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
   NSLog(@"Did scroll");
   //do your code here
}
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
    NSLog(@"Did end dragging");
   //do your code here
}
-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{
    NSLog(@"Did begin decelerating");
   //do your code here
}
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
   NSLog(@"Did begin dragging");
   //do your code here
}
于 2016-02-29T04:27:29.180 回答
0

SWIFT 中直接的编程方式

把它包起来

创建一个UIScrollView

let scrollView = UIScrollView() 
scrollView.translatesAutoresizingMaskIntoConstraints = false

使用单个子视图来保存所有内容子视图

let contentView = UIView()
contentView..translatesAutoresizingMaskIntoConstraints = false

通常,您只希望您的内容向一个方向滚动。在大多数情况下垂直滚动。因此将内容视图的宽度设置为滚动视图的宽度。

NSLayoutConstraint.activate([
    contentView.widthAnchor.constraint(equalTo: scrollView.widthAnchor)

将四个约束(上、下、左、右)从我们的单个内容视图附加到滚动视图。

    contentView.topAnchor.constraint(equalTo: scrollView.topAnchor),
    contentView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor),
    contentView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor),
    contentView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor),

确保您在内容视图的所有四个侧面都附加了约束,以便它将扩展到您的内容的大小。

// After Adding your subviews to the contentView make sure you've those two constraints set:

    firstSubView.topAnchor.constraint(equalTo: contentView.topAnchor),
    .
    .
    .
    lastSubView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),
])

参考:在 iOS 中使用 UIScrollView 和自动布局

于 2021-06-03T09:20:26.960 回答