保持UIScrollView的子视图不会调整大小?

Mic*_*Lee 3 iphone cocoa uiscrollview ios

我有一个UIScrollView,返回的视图的几个级别的子视图viewForZoomingInScrollView.在缩放期间,我希望其中一些子视图调整大小,而其他子视图则不调整大小.无论我尝试什么,所有子视图都会调整大小.在我希望不调整大小的子视图的超级视图中,我设置了autoResizesSubviews = NO,并且还尝试了contentMode = UIViewContentModeCenter.我也试过设置所autoresizingMask涉及的所有视图UIViewAutoresizingNone.有什么想法吗?我无法重构子视图的层次结构.

And*_*sen 15

UIScrollView缩放视图的子视图通过更改其变换来"调整大小",而不是通过更改其边界等.一个简单的解决方案是捕获在缩放视图上设置的变换,将其反转并将其应用于子视图,取消滚动视图应用的缩放变换.

在返回的视图中viewForZoomingInScrollView,覆盖-setTransform:,并遍历所有相关的子视图并应用反转变换:

- (void)setTransform:(CGAffineTransform)transform 
{
    [super setTransform:transform];

    CGAffineTransform invertedTransform = CGAffineTransformInvert(transform);
    for (UIView *view in subviewsNotToBeResized) 
    {
        [view setTransform:invertedTransform];
    }
}
Run Code Online (Sandbox Code Playgroud)