以编程方式 UIScrollView 不起作用

Posted

技术标签:

【中文标题】以编程方式 UIScrollView 不起作用【英文标题】:programmatically UIScrollView not working 【发布时间】:2014-07-15 05:15:39 【问题描述】:

我是 ios 新手。我尝试将 8 个 UItext-field 添加到 UIScrollView。 我的代码是这样的:-

 City=[[UITextField alloc]init];
    City.frame=CGRectMake(45, 150, 221, 30);
    [self.view addSubview:City];
    City.backgroundColor=[UIColor whiteColor];
    City.placeholder=@"Email";
    [City setFont:[UIFont fontWithName:@"Times New Roman" size:20]];
    //[Username setTextAlignment:UITextBor];
    City.layer.borderColor=[[UIColor yellowColor]CGColor];
    City.layer.borderWidth=2.0;
    [City setBorderStyle:UITextBorderStyleLine];
same as 
city1=[[UITextField alloc]init];
City1.frame=CGRectMake(45, 195, 221, 30);

  |
  |
  |
  |
city8=[[UITextField alloc]init];
city8.frame=CGRectMake(45, 355, 221, 30);

开玩笑,我现在创建了 8 个文本文件,都添加到 UIScrollview。

UIScrollView *scroll = [UIScrollView alloc];
    scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(45, 105, 221, 355)];

    scroll.pagingEnabled = YES;

    scroll.showsHorizontalScrollIndicator = YES;
    scroll.showsVerticalScrollIndicator = YES;
    scroll.scrollsToTop = NO;
    scroll.delegate = self;             //say "NO" to disable scroll
    [self.view addSubview:scroll];
    [scroll addSubview:City];
    [scroll addSubview:City1];
     |
     |
    [scroll addSubview:City8];

我只需要 UITextField 和 UIScrollView.First crated UITextField 然后创建 ScrollView 并添加两者,但我的 textFileds 没有添加 Scroll

请给我任何想法,请告诉我我的代码有什么问题

【问题讨论】:

不要给变量名大写 尝试为滚动视图设置 contentSize @AndreyChernukha 删除了大写名称,但没有运气 设置滚动视图的内容大小 @karthikeyan 请锁定我的密码 【参考方案1】:

删除此代码并检查

[self.view addSubview:City];

在滚动视图中添加所有文本字段后放置此代码。

[self.view addSubview:scroll];

也许对你有帮助。

【讨论】:

感谢您的回复,我按照您说的尝试了但没有运气请给我任何想法 你是否设置了滚动视图的内容大小。 我这样设置内容大小 scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(45, 105, 221, 355)]; scrollView.contentSize = CGSizeMake(scrollView.frame.size.width, sizeOfContent);【参考方案2】:
 UIScrollView *scroll = [UIScrollView alloc];
    scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];

    scroll.pagingEnabled = YES;
    scroll.showsHorizontalScrollIndicator = YES;
    scroll.showsVerticalScrollIndicator = YES;
    scroll.scrollsToTop = NO;
    scroll.delegate = self;             //say "NO" to disable scroll
    scroll.contentSize = CGSizeMake(scrollView.frame.size.width*8,0);

 UITextField*City=[[UITextField alloc]init];
    City.frame=CGRectMake(45, 150, 221, 30);
    City.backgroundColor=[UIColor whiteColor];
    City.placeholder=@"Email";
    [City setFont:[UIFont fontWithName:@"Times New Roman" size:20]];
    //[Username setTextAlignment:UITextBor];
    City.layer.borderColor=[[UIColor yellowColor]CGColor];
    City.layer.borderWidth=2.0;
    [City setBorderStyle:UITextBorderStyleLine];

UITextField*city1=[[UITextField alloc]init];
    city1.frame=CGRectMake(45, 195, 221, 30);
    city1.backgroundColor=[UIColor whiteColor];
    city1.placeholder=@"Email1";
    UITextField*city8=[[UITextField alloc]init];
    city8.frame=CGRectMake(45, 355, 221, 30);
    [scroll addSubview:City];
    [scroll addSubview:city1];
    [scroll addSubview:city8];
   [self.view addSubview:scroll];

希望对你有帮助。

【讨论】:

【参考方案3】:

试试这个代码

 UIScrollView *scroll ;
        scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    //set your frame according to your viewframe or text field frame.here give width and height of scrolling
    scroll.contentSize=CGSizeMake(self.view.frame.size.width+100,self.view.frame.size.height+100);
        scroll.pagingEnabled = YES;
       self.scrView.showsHorizontalScrollIndicator = YES;
        self.scrView.showsVerticalScrollIndicator=YES;

【讨论】:

【参考方案4】:

如果您想将UITextField's 添加到UIScrollView,则无需添加self.view。 所以删除将UITextField's 添加到self.view 的语句。虽然这不是您问的问题,但没有必要在视图中添加这些文本字段。

所以删除所有 --> [self.view addSubview:City];

就您的问题而言,除了一件事之外,您做的一切都是正确的,那就是“增加您的UIScrollView 的内容大小”。你可以按如下方式增加

scroll.contentSize = CGSizeMake(Width,height); 

宽度和高度您可以根据需要设置。

更多信息请参考UIScrollView reference

【讨论】:

【参考方案5】:
City=[[UITextField alloc]init];
   City.frame=CGRectMake(45, 150, 221, 30);
    [self.view addSubview:City];//----------------> Please remove this line
    City.backgroundColor=[UIColor whiteColor];
    City.placeholder=@"Email";
    [City setFont:[UIFont fontWithName:@"Times New Roman" size:20]];
    //[Username setTextAlignment:UITextBor];
    City.layer.borderColor=[[UIColor yellowColor]CGColor];
    City.layer.borderWidth=2.0;
    [City setBorderStyle:UITextBorderStyleLine];
same as 
city1=[[UITextField alloc]init];
City1.frame=CGRectMake(45, 195, 221, 30);

  |
  |
  |
  |
city8=[[UITextField alloc]init];
city8.frame=CGRectMake(45, 355, 221, 30);

创建所有文本字段(八个文本字段)后,然后创建 ScrollView

//UIScrollView *scroll = [UIScrollView alloc]; //---------------> No Need this line
    UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(45, 105, 221, 355)];

    scroll.pagingEnabled = YES; //---------------->>> Do you need paging ? Other wise set NO

    scroll.showsHorizontalScrollIndicator = YES;
    scroll.showsVerticalScrollIndicator = YES;
    scroll.scrollsToTop = NO;
    scroll.delegate = self;             //say "NO" to disable scroll
    [scroll addSubview:City];
    [scroll addSubview:City1];
     |
     |
    [scroll addSubview:City8];

将所有文本字段添加为滚动视图的子视图后,我们必须将滚动视图放置到您的父视图所以请添加以下代码

[self.view addSubview:scroll];

现在一切正常,但现在你的滚动视图仍然不能滚动,因为我们没有设置滚动内容大小,要这样做

1) 您的文本字段高度为 30,两个文本字段之间的间距为 15,因此总共 45 你有 8 个文本字段 Toatl = 360

2) 您的起始文本字段 Y 轴是 150 而不是零,所以我们需要添加 360 + 150 = 510

3) 你的滚动视图宽度和文本字段宽度是通用的 = 221

scroll.contentSize = CGSizeMake(510,221);

现在构建它,一切顺利,继续编码:)

【讨论】:

以上是关于以编程方式 UIScrollView 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

调整 UIScrollView 的大小以适应其内容……不起作用

ios - UIScrollView中的iOS编程缩放不起作用

dismissWithClickedButtonIndex 在 UIViewController - UIScrollView - ActionSheet 关系中不起作用

缩放 UIScrollView 不起作用

以编程方式自动布局不起作用

以编程方式继续不起作用