2013-01-02 72 views
0

我創建了帶有三個子視圖的分頁UIScrollView。它在橫向(我設計的方向)對iPhone 5進行測試時效果很好,但只要設備分辨率發生變化就會中斷測試。相對於設備和方向的框架大小

無論設備或方向如何,我都可以將幀縮放到正確的分辨率?

- (void)viewDidLoad { 
    CGRect frame; 
    frame.origin.x = self.scrollView.frame.size.width * i; 
    frame.origin.y = 0; 
    frame.size = self.scrollView.frame.size; 
} 

- (IBAction)changePage { 
    CGRect frame; 
    frame.origin.x = self.scrollView.frame.size.width * self.pageControl.currentPage; 
    frame.origin.y = 0; 
    frame.size = self.scrollView.frame.size; 
    [self.scrollView scrollRectToVisible:frame animated:YES]; 
    pageControlBeingUsed = YES; 
} 
+0

Autoresizingmasks,也許? – CodaFi

+0

@CodaFi能否詳細說明一下? – colindunn

+0

**請勿將Xcode標籤用於與Xcode無關的問題!** – 2013-01-04 09:43:21

回答

1

將您的滾動視圖置於另一個自定義視圖中。在自定義視圖中,實現layoutSubviews像這樣。

@interface ViewScalesOneSubview : UIView 
@property UIView *scalingSubview;//subview to scale 
@end 

@implementation ViewScalesOneSubview 
-(void) layoutSubviews { 
[super layoutSubviews]; 
CGRect parentBounds = [self bounds]; 
CGRect childBounds = [scalingSubview bounds];//unscaled 
CGFloat scale = parentBounds.width/childBounds.width; 
CGAffineTransform transform = CGAffineTransformMakeScale(scale , scale); 
//fiddle with x,y translation to position as you like 
scalingSubview.transform = transform; 
} 
@end 

給自定義視圖自動調整,以適應窗口或任何容器和隨着旋轉的變化。不要給滾動視圖自動調整大小,因爲它會與此自定義layoutSubviews相沖突。當自定義視圖改變大小時,它將縮放scalingSubview以適應。通過對兩個軸使用相同的比例尺,它將保留寬高比。你可以縮放以適應,或者使用高度而不是寬度或其他。

編輯:

要調整視圖,而不是縮放視圖中,設置自動尺寸調整掩碼。

scrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 

https://developer.apple.com/library/ios/documentation/uikit/reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/instp/UIView/autoresizingMask

你也可以這樣做在Interface Builder。

+0

謝謝,感謝您的回覆。但我不能很好地表達我的問題。縮放UIScrollView和它的子視圖不應該需要創建另一個視圖,不是?有沒有簡單的方法來告訴我的scrollView等於窗口的100%寬度? – colindunn

+0

縮放與調整UIView大小非常不同。我在答案中添加了關於自動調整的註釋。 – drawnonward

相關問題