oscarimonbox
12/29/2015 - 10:34 AM

Centrar elementos en ScrollViews

Centrar elementos en ScrollViews

1) Crear una view que contendrá el scroll view (o intentar crearla por Storyboard)

2) Código de preparación. IMPORTANTE: LA LLAMADA HAY QUE HACERLA DESDE EL METODO -(void) viewDidLayoutSubviews {}:

    [self.vMembers.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
    
    UIScrollView * scrollMembers = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.vMembers.frame.size.width, self.vMembers.frame.size.height-8)];
    [scrollMembers setScrollEnabled:YES];
    [scrollMembers setBounces:NO];
    [scrollMembers setShowsHorizontalScrollIndicator:NO];
    
    
    int numberMembers = (int) [[LOApplicationModel sharedInstance].family count];
    int i = 0;
    int memberWidth = self.vMembers.frame.size.height-8;
    
    int contentWidth = memberWidth * numberMembers;
    if(contentWidth<self.vMembers.frame.size.width){
        contentWidth =self.vMembers.frame.size.width;
    }
    
    UIView * contentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, contentWidth, scrollMembers.frame.size.height)];
    [scrollMembers addSubview:contentView];
    [self.vMembers addSubview:scrollMembers];
    
    int initialPos = (contentView.frame.size.width/2) - (memberWidth * ((int)numberMembers/2));
    
    if(numberMembers%2!=0){
        initialPos -= (memberWidth/2);
    }
    if(initialPos<0){
        initialPos = 0;
    }

    for (LOChild *child in [LOApplicationModel sharedInstance].family){
        
        int ini = initialPos + (i*memberWidth);
        
        LOFamilyMemberView *member = [[LOFamilyMemberView alloc] initWithFrame:CGRectMake(ini, 0, MAIN_SCROLLVIEW_FAMILY_MEMBERS_WIDTH, MAIN_SCROLLVIEW_FAMILY_MEMBERS_HEIGHT)];
        [member.imgFamilyMember sd_setImageWithURL:child.photoURL placeholderImage:[UIImage imageNamed:@"profileBlank"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
            if(image){
                [member.imgFamilyMember setImage:image];
                member.imgFamilyMember.layer.cornerRadius = member.imgFamilyMember.frame.size.height/2;
                member.imgFamilyMember.layer.borderWidth=2.0;
                member.imgFamilyMember.layer.borderColor=[[UIColor whiteColor] CGColor];
                member.imgFamilyMember.clipsToBounds = YES;
            }
        }];
        member.lblFamilyMember.text = child.name;
        member.tag = i;
        
/* PARA HABILITAR EL TAP
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(openProfile:)];
        [v addGestureRecognizer:tap];
*/
        [contentView addSubview:member];
        i++;
        
    }
    
    [scrollMembers setContentSize:CGSizeMake(contentWidth, scrollMembers.frame.size.height)];
    
    [scrollMembers setNeedsLayout];
    [scrollMembers layoutIfNeeded];
    [contentView setNeedsLayout];
    [contentView layoutIfNeeded];
    [self.vMembers setNeedsLayout];
    [self.vMembers layoutIfNeeded];