2012-01-17 24 views
7

Vì vậy, tôi có UIImageView làm tiểu sử của UIScrollView, tôi đã đặt contentSize nhỏ hơn chiều rộng và chiều cao UIImageView, tuy nhiên nó không cho phép tôi cuộn .. tại sao thế này Dưới đây là một số mã:UIScrollView không cuộn mặc dù contentSize nhỏ hơn 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 

Bất kỳ ý tưởng nào?

+0

thử này ... imgScrollView.contentSize = imgView.frame .kích thước; –

+0

không hoạt động quá – adit

Trả lời

10

Đó là do kích thước giới hạn cuộn của bạn lớn hơn kích thước nội dung của bạn. Kích thước nội dung cần phải là kích thước thực tế của chế độ xem hình ảnh và kích thước hiển thị được đặt theo khung/giới hạn. Tôi đoán bạn muốn cuộn một hình ảnh trong một rect có kích thước {200, 200}? Hãy thử điều này:

 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

do đó kích thước khung hình phải nhỏ hơn contentSize? nếu kích thước khung hình giống như contentSize thì nó sẽ không cuộn? – adit

+14

Theo mặc định, CÓ. Nhưng nếu bạn đặt alwaysBounceVertical và alwaysBounceHorizontal thành YES (cả hai mặc định NO), bạn có thể kéo nội dung của bạn xem ngay cả contentSize nhỏ hơn kích thước khung –

+0

Nó đã được lái xe cho tôi hạt coz scrollview không di chuyển khi contentSize nhỏ hơn kích thước của giới hạn . Trong trường hợp của tôi, tôi muốn giảm kích thước nội dung của scrollview khi bàn phím xuất hiện, tôi đã ngạc nhiên khi thấy rằng việc giảm kích thước nội dung không làm cho chế độ xem cuộn để cuộn. Đoán, thay vào đó, tôi phải thay đổi khung của chế độ xem cuộn. –

0

cuộn xem kích thước nội dung phải lớn hơn chiều rộng khung scrollview và chiều cao
làm điều này -

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

Tôi nghĩ rằng nó sẽ giúp đỡ.

+0

nếu nó giống nhau thì sao? – adit

+0

Nó sẽ không cho phép cuộn, nếu bạn muốn cuộn để cuộn, kích thước nội dung phải lớn hơn kích thước khung – mithilesh

5

Tôi biết điều này là cũ, nhưng tôi muốn chỉ ra rằng khi bạn tạo ra một UIScrollView trong mã điều quan trọng nhất để thiết lập là:

scrollView.scrollEnabled = YES;

Nếu bạn không đặt đó, bạn contentSize không liên quan.

+1

Điều này phù hợp hơn với việc nhận xét chứ không phải là câu trả lời. Trong mọi trường hợp, nó gây hiểu lầm: như [được nêu trong tài liệu] (http://developer.apple.com/library/ios/#documentation/uikit/reference/UIScrollView_Class/Reference/UIScrollView.html#//apple_ref/occ/ instp/UIScrollView/scrollEnabled), giá trị mặc định cho 'scrollEnabled' là' YES'. Bạn ** không ** cần đặt 'scrollEnabled' thành' YES' trong mã, trừ khi bạn đã đặt nó thành 'NO'. – sjwarner

+1

Tôi không đồng ý.Nó hoạt động như một câu trả lời nữa. (Và nó chỉ giải quyết vấn đề của tôi. Cảm ơn Chris.) Rất nhiều người di chuyển xuống nhìn vào các câu trả lời, và không đọc tất cả (hoặc bất kỳ) các ý kiến, trừ khi câu trả lời dẫn họ đến. Đôi khi bạn đang làm việc với mã được viết bởi người khác và bạn có thể không quen thuộc với tất cả. – Alyoshak

+0

Tôi đã phải đặt tôi thành CÓ để làm cho nó cuộn. – Chris

0

Nếu bạn đang cố gắng thiết lập điều này bằng IB, hãy đảm bảo thuộc tính Độ cao của UIScrollView được đặt thành số thấp hơn thuộc tính Độ cao của nội dung của bạn. Ví dụ: nếu bạn đã đặt chiều cao của contentView thành 810 pts, hãy đảm bảo đặt chiều cao UIScrollView của bạn thành khoảng 610 pts hoặc hơn.

2

cách khéo léo để thực hiện việc này là luôn đặt nội dungKích thước lớn hơn kích thước chế độ xem. Nhưng có một tài sản trong Swift cho phép một scrollview luôn "di chuyển" không phụ thuộc vào kích thước nội dung:

scrollView.alwaysBounceVertical = true 

Có một cuộn ngang cũng

Các vấn đề liên quan