2013-09-11 4 views
2

У меня есть вертикальное прокрутка с миниатюрными изображениями, чтобы действовать как «боковая панель» для определенных элементов приложения ipad.UIScrollview Динамический размер контента очень сильно зависит от количества элементов

Вот мой код, чтобы установить размер содержимого:

- (void)setScrollViewContentSize:(UIScrollView*)scrollView{ 
    NSInteger viewCount = [scrollView.subviews count]; 

    NSLog(@"viewCount: %d", viewCount); 
    NSLog(@"height: %f", (viewCount * 190.0f)); 
    scrollView.contentSize = CGSizeMake(scrollView.superview.frame.size.width, (viewCount * 190.0f)); 
    } 

Когда я запускаю мое приложение, есть одно меню, которое имеет 57 пунктов, поэтому журнал количество просмотров показывает, как 57, а высота показывает, как 10830. В другом меню у меня есть 13 предметов, и, таким образом, высота равна 2470.

Все кажется прекрасным здесь, но когда я прокручиваю до конца, меню с 57 значками имеет слишком много белого пространства, меню с 13 элементами отлично заканчивается на последнем элементе с небольшим отрывом (каждый миниатюра - 183 пикселя). Я пытаюсь выяснить, в чем причина, но похоже, что чем больше элементов меню у меня есть, тем больше будет расстояние между прокрутками в последнем элементе.

Я попытался вызвать scrollView sizeToFit и даже попытался создать CGRect видимой области для яблока в мой фрейм, но ни один из них не работал. Есть идеи?

спасибо.

+0

Как вы добавления подвидов в целях прокрутки? Что смещения вы используете (7px?) – Wain

+0

смещение о том, что размер и я сложением подвидов, как это: CGRect productFrame = CGRectMake (10,0, IDX * высота + (обивка * IDX + обивка), ширину, высота); UIImageView * productImage = [[[UIImageView alloc] initWithFrame: productFrame] autorelease]; [self.imageExpander.scrollView addSubview: productImage]; – kevinl

ответ

8

из https://stackoverflow.com/a/14852596/1363779

float sizeOfContent = 0; 
UIView *lLast = [scrollView.subviews lastObject]; 
NSInteger wd = lLast.frame.origin.y; 
NSInteger ht = lLast.frame.size.height; 

sizeOfContent = wd+ht; 

scrollView.contentSize = CGSizeMake(scrollView.frame.size.width, sizeOfContent); 

Это хороший и простой способ сделать это.

+1

По какой-то причине это никогда не возвращало для меня подходящее представление, хотя оно было правильным в моем файле nib. Я закончил тем, что просто отказался от вызова последнего подзаголовка и жесткого кодирования того, на каком субблоке я хочу, чтобы он основывался на этом. – user3344977

1

Swift 2.0 версия

var sizeOfContent: CGFloat = 0 
    let lLast: UIView = scrollView.subviews.last! 
    let wd: CGFloat = lLast.frame.origin.y 
    let ht: CGFloat = lLast.frame.size.height 
    sizeOfContent = wd + ht 
    scrollView.contentSize = CGSizeMake(scrollView.frame.size.width, sizeOfContent) 
Смежные вопросы