¿Cómo crear un UIScrollView mediante programación?


Bien, así que la clave aquí es que no estoy usando IB en absoluto, porque la vista con la que estoy trabajando se crea mediante programación. El UIView cubre la mitad inferior de la pantalla, y tiene un montón de botones. Sin embargo, quiero agregar más botones a UIView, sin hacerlo más grande. Para hacerlo, quiero hacer un UIScrollView dentro de la vista, lo que me permitirá agregar más botones fuera de la pantalla para que el usuario pueda desplazarse hasta ellos. Creo que así es como funciona.

self.manaView = [[[UIView alloc] initWithFrame:frame] autorelease];
self.manaView.backgroundColor = [UIColor purpleColor];

UIScrollView *scroll = [UIScrollView alloc];
scroll.contentSize = CGSizeMake(320, 400);
scroll.showsHorizontalScrollIndicator = YES;
[self.manaView addSubview:scroll];

La primera parte del código inicia mi UIView, que funciona muy bien, pero no puedo averiguar cómo hacer el UIScrollView programáticamente y agregarlo a la vista, y luego agregar los botones a ella.

UIButton *ret2 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
ret2.tag = 102;
ret2.frame = CGRectMake(255, 5, 60, 50);
[ret2 setTitle:@"Return" forState:UIControlStateNormal];
[ret2 addTarget:self action:@selector(flipAction:) forControlEvents:UIControlEventTouchUpInside];
[scroll addSubview:ret2];

Cuando hice eso, el botón simplemente desapareció de mi pantalla. Entonces, ¿cómo hago esto correctamente? Gracias por su ayuda!

Author: Jay Bhalani, 2010-06-08

6 answers

En lugar de:

UIScrollView *scroll = [UIScrollView alloc];

Haga esto (estableciendo el marco en el tamaño que desee que sea la vista de desplazamiento):

UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:...];
 26
Author: Ole Begemann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-08 15:26:51

Esto puede ser útil para crear uiscrollview programmatically
http://unconditionalloop.blogspot.com/2011/04/uiscrollview-programmatically.html

  UIScrollView *scrollview = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];   
     NSInteger viewcount= 4;  
     for(int i = 0; i< viewcount; i++) { 

        CGFloat y = i * self.view.frame.size.height;  
        UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, y,self.view.frame.size.width, self .view.frame.size.height)];       
        view.backgroundColor = [UIColor greenColor];  
        [scrollview addSubview:view];  
        [view release];  
     }    
  scrollview.contentSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height *viewcount);   
  [self.view addSubview:scrollview];
 23
Author: Aravindhan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-05 06:40:52

Prueba esto,

{

        scrollview=[[UIScrollView alloc]initWithFrame:CGRectMake(0,0,320,480)]; 
        scrollview.showsVerticalScrollIndicator=YES;
        scrollview.scrollEnabled=YES;
        scrollview.userInteractionEnabled=YES;
        [self.view addSubview:scrollview];
        scrollview.contentSize = CGSizeMake(width,height);

    [scrollview release];
}
 12
Author: NANNAV,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-27 13:29:52

Crear un UIScrollView Programáticamente

ScrView = [[UIScrollView alloc]initWithFrame:CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y, self.view.frame.size.width, self.view.frame.size.height)];
ScrView.showsVerticalScrollIndicator=YES;
[ScrView setBackgroundColor:[UIColor yellowColor]];
[ScrView setScrollEnabled:YES];
[ScrView setContentSize:CGSizeMake(0, 700)];
[ScrView setShowsHorizontalScrollIndicator:YES];
[ScrView setShowsVerticalScrollIndicator:YES];
[self.view addSubview:ScrView];
 3
Author: Kiran Bhoraniya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-04 07:12:06

Uso lazy mucho al crear la interfaz de usuario mediante programación, así:

class WorldViewController: UIViewController {
    override func loadView() {
        super.loadView()
        view = scrollView
        scrollView.addSubview(label0)
    }

    lazy var scrollView: UIScrollView = {
        let instance = UIScrollView()
        instance.backgroundColor = UIColor.blackColor()
        return instance
    }()

    lazy var label0: UILabel = {
        let instance = UILabel()
        instance.text = "Ice caps are melting"
        instance.textColor = UIColor.whiteColor()
        instance.sizeToFit()
        return instance
    }()

    var needLayoutContent = true

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        if needLayoutContent {
            let bounds = scrollView.bounds
            let contentSize = CGSizeMake(bounds.width * 1.5, bounds.height * 1.5)
            label0.center = CGPointMake(contentSize.width / 2, contentSize.height / 2)
            scrollView.contentSize = contentSize
            scrollView.contentOffset = CGPointMake(bounds.width * 0.25, bounds.height * 0.25)
            needLayoutContent = false
        }
    }
}
 1
Author: neoneye,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-16 16:32:05

Método simple: Puede crear varias veces si necesita más

- (void)viewDidLoad
{
    [super viewDidLoad];

    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;

        //[self myscrollView];
    }
}
 0
Author: svmrajesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-06 14:03:05