2012-01-17 5 views
7

Так что у меня UIImageView как подвид из UIScrollView, я задал contentSize быть меньше UIImageView ширины и высоты, однако она не позволяет мне прокрутить .. почему это? Вот код:UIScrollView не прокрутке хотя contentSize меньше UIImageView

UIImage * image = [UIImage imageWithData:data]; 
       UIImageView * imgView = [[UIImageView alloc] initWithImage:image]; 
       [imgView setUserInteractionEnabled:YES]; 
       //[imgView setContentMode:UIViewContentModeScaleAspectFill]; 
       [imgView setBackgroundColor:[UIColor clearColor]]; 
       [imgView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight]; 
       [imgView setFrame:CGRectMake(0, 0, imgView.frame.size.width, imgView.frame.size.height)]; 

       CGRect imgFrame; 
       imgFrame.size.width = originalImageSize.width; 
       imgFrame.size.height = originalImageSize.height; 
       imgFrame.origin.x = imageOriginPoint.x; 
       imgFrame.origin.y = imageOriginPoint.y; 

       UIScrollView * imgScrollView = [[UIScrollView alloc] initWithFrame:imgFrame]; 
       [imgScrollView setScrollEnabled:YES]; 
       [imgScrollView setClipsToBounds:YES]; 
       [imgScrollView addSubview:imgView]; 
       [imgScrollView setBackgroundColor:[UIColor clearColor]]; 


    [imgScrollView setFrame:imgFrame]; 
       [imgScrollView setContentSize:CGSizeMake(200, 200)]; 

SCROLL VIEW CONTENT SIZE WIDTH IS 200.000000 AND HEIGHT CONTENT SIZE IS 200.000000 
UIIMAGE VIEW WIDTH IS 2240.225830 AND HEIGHT IS 2240.225830 
SCROLL VIEW FRAME WIDTH IS 768.000000 AND SCROLL VIEW FRAME HEIGHT IS 768.000061 

Есть идеи?

+0

попробовать это ... imgScrollView.contentSize = imgView.frame .размер; –

+0

тоже не работает – adit

ответ

10

Это связано с тем, что размер рамки прокрутки превышает размер вашего контента. Размер содержимого должен быть фактическим размером изображения, а видимый размер задается рамкой/границами. Я думаю, вы хотите прокрутить изображение в прямоугольнике размером {200, 200}? Попробуйте это:

 UIScrollView * imgScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)]; // this is your visible rect 
     [imgScrollView setScrollEnabled:YES]; 
     [imgScrollView setClipsToBounds:YES]; 
     [imgScrollView addSubview:imgView]; 
     [imgScrollView setBackgroundColor:[UIColor yellowColor]]; 

     [imgScrollView setContentSize:imgFrame.size]; // this is your image view size 
+0

, поэтому размер рамки должен быть меньше, чем contentSize? если размер кадра совпадает с размером содержимого, то он не будет прокручиваться? – adit

+14

По умолчанию YES. Но если вы установите alwaysBounceVertical и alwaysBounceHorizontal на YES (оба значения по умолчанию NO), вы можете перетащить контентное представление даже в contentSize меньше, чем размер кадра. –

+0

Это заставляло меня гаснуть, потому что прокрутка не была прокруткой, когда contentSize был меньше размера границ , В моем случае я хочу уменьшить размер содержимого scrollview при приближении клавиатуры, я был поражен, увидев, что уменьшение размера содержимого не позволяет прокручивать прокрутку. Угадайте, я должен изменить рамку просмотра прокрутки. –

0

прокрутки вид Размер содержимого должен быть больше ширины рамы Scrollview и высота
это сделать -

scrollView.contentSize = CGSizeMake(originalImageSize.width,originalImageSize.height); 

Я думаю, что это поможет.

+0

Что делать, если это то же самое? – adit

+0

Это не позволит прокручивать, если вы хотите прокрутить прокрутку, размер содержимого должен быть больше, чем размер кадра – mithilesh

5

Я знаю, что это старый, но я хочу отметить, что при создании UIScrollView в коде самое главное, чтобы установить это:

scrollView.scrollEnabled = YES;

Если вы не установили, что ваш contentSize не имеет значения.

+1

Это намного лучше подходит для комментариев, а не для ответа. В любом случае это вводит в заблуждение: как [указано в документах] (http://developer.apple.com/library/ios/#documentation/uikit/reference/UIScrollView_Class/Reference/UIScrollView.html#//apple_ref/occ/ instp/UIScrollView/scrollEnabled), значением по умолчанию для 'scrollEnabled' является' YES'. Вы ** не ** должны устанавливать 'scrollEnabled' в' YES' в коде, если вы ранее не устанавливали его на 'NO'. – sjwarner

+1

Я не согласен.Он также работает как ответ. (И это просто решило мою проблему. Спасибо, Крис.) Многие люди прокручивают вниз, глядя на ответы, и не читают все (или любые) комментарии, если на них не ответит. Иногда вы работаете с кодом, написанным другим, и вы, возможно, не знакомы со всем этим. – Alyoshak

+0

Мне нужно было установить мой на YES, чтобы прокрутить его. – Chris

0

Если вы пытаетесь установить это с помощью IB, убедитесь, что свойство Height вашей UIScrollView установлено на меньшее число, чем свойство Height в contentView. Например, если вы установили высоту своего содержимого в 810 очков, убедитесь, что высота вашего UIScrollView составляет примерно 610 очков или около того.

2

janky способ сделать это всегда, чтобы contentSize был больше размера представления. Но есть свойство в Swift, что позволяет Scrollview всегда «прокручивать», независимо от размера контента:

scrollView.alwaysBounceVertical = true 

Там один для горизонтальной прокрутки, а

Смежные вопросы