UIScrollView SubView не будет изменять размер

Дизайн:
Иерархия просмотра выглядит следующим образом:

  • UIScrollView (for paging multiple image)
    • UIScrollView (for enabling zoom on the UIImageView)
      • UIImageView
        • UIView (origin,size relative to UIImage in UIImageView)
        • UIView
        • UIView ...
    • UIScrollview
      • UIImageView
        • UIView
        • UIView ...
    • UIScrollView ... и так далее

Реализация:

- (id)init  
{  
self = [super init];  
if (self) {  
    // Custom initialization  
    self.minimumZoomScale = 1.0f;  
    self.maximumZoomScale = 4.0f;  
    self.zoomScale = 1.0f;  
    self.bouncesZoom = true;  
    self.bounces = true;  
    self.tag = 10;  
    self.alwaysBounceHorizontal = false;  
    self.autoresizesSubviews = YES;  

    self.zoomView = [[UIImageView alloc] init];
    self.zoomView.userInteractionEnabled = YES;
    self.zoomView.autoresizesSubviews = YES;
}

return self;
}  
- (void)displayImage:(UIImage *)image  
{    
// Set the image in the view  
[_zoomView setImage:image];  

// Set the Frame size to the size of image size  
// Ex. Resulting ScrollView frame = {0,0},{1250,1500}  
// Ex. Resulting ImageView frame = {0,0}, {1250,1500}  
CGRect scrollFrame = self.frame;  
scrollFrame.size.width = image.size.width;  
scrollFrame.size.height = image.size.height;  
self.frame = scrollFrame;  

CGRect iViewFrame = _zoomView.frame;  
iViewFrame.size.width = image.size.width;  
iViewFrame.size.height = image.size.height;  
_zoomView.frame = iViewFrame;  

// Add subviews before resetting the contentsize  
for (customClass* field in list.fields) {  

    UIView* view = [[UIView alloc] initWithFrame:CGRectMake([field.x floatValue], [field.y floatValue], [field.width floatValue], [field.height floatValue])];  
    view.backgroundColor = [UIColor redColor];  
    view.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin |UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;  

    [_zoomView addSubview:view];  
}  

// Set the Frame size to the size of scrollview frame size  
// Ex. Resulting ScrollView Frame = {0,0},{320,460}  
// Ex. Resulting ImageView Frame = {0,0},{320,460}  
CGRect scrollViewFrame = self.frame;  
scrollViewFrame.size.width = 320.0f;  
scrollViewFrame.size.height = 460.0f;  
self.frame = scrollViewFrame;  

CGRect imageViewFrame = _zoomView.frame;  
imageViewFrame.size.width = self.bounds.size.width;  
imageViewFrame.size.height = self.bounds.size.height;  
_zoomView.frame = imageViewFrame;  


self.contentSize = _zoomView.bounds.size;  

[self addSubview:_zoomView];  
}  

Выше приведен код, который я пытался реализовать. Он добавляет UIViews к UIImageView внутри UIScrollView. Но относительное происхождение UIView неверно (как до, так и после изменения размера).

Есть ли что-то, что я должен сделать по-другому, чтобы правильно разместить UIView внутри UIImageView?


person Soki    schedule 04.01.2013    source источник
comment
Непонятно, что вы спрашиваете. Что вы хотите, чтобы отображались подвиды изображения? Есть ли что-то, что вы сделали, что не работает, или вы просто спрашиваете, будет ли это работать?   -  person Simon Goldeen    schedule 05.01.2013
comment
Саймон, я отредактировал вопрос. Я также добавил фрагмент кода, который пытался реализовать. Надеюсь, это поможет сделать это немного более ясным. Спасибо.   -  person Soki    schedule 08.01.2013


Ответы (1)


Это было самым популярным в Google из-за того, что «подвиды прокрутки не будут изменять размер». Для всех, кто перейдет по этой ссылке:

Глядя на ваш источник и сравнивая с моим, я понял, что в Interface Builder в моем файле NIB не отмечена галочка для «автоматического размера подвидов». У меня смутная память, возможно, это связано с тем, что в старой версии Xcode (это старый проект, который некоторое время поддерживался)... UIScrollView по умолчанию отключил его.

Итак: убедитесь, что вы правильно установили его в Xcode/Interface Builder и/или что вы устанавливаете его в коде.

person Adam    schedule 10.05.2013