2012-07-09 34 views
5

Tôi có bảng phân cảnh với 1 UIViewController, giữ 1 UIView có chứa một số lồng nhau UIView s. Tôi subclassed các View Controller để thực hiện phương pháp này:UIView có kích thước chân dung trong khi ở chế độ ngang?

- (BOOL)shouldAutorotateToInterfaceOrientation: UIInterfaceOrientation)interfaceOrientation { 
    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationLandscapeLeft); 
} 

Tôi cũng đã thêm

<key>UISupportedInterfaceOrientations</key> 
    <array> 
    <string>UIInterfaceOrientationLandscapeLeft</string> 
    <string>UIInterfaceOrientationLandscapeRight</string> 
    </array> 
<key>UIInterfaceOrientation</key> 
<string>UIInterfaceOrientationLandscapeLeft</string> 

đến Info.plist.

Trong viewDidLoad của UIView chính tôi đang làm điều này:

Vấn đề là kiểm soát chỉ là 756px rộng thay vì dự kiến ​​1024. Xem ảnh chụp màn hình dưới đây để biết chi tiết. enter image description here Tôi đã tìm kiếm trên toàn bộ web nhưng tôi không thể tìm thấy giải pháp cho vấn đề bực bội này ở bất cứ đâu. Tôi đang sử dụng Xcode 4.5 với iOS5.1 được đặt làm SDK cơ sở.

EDIT Nó hoạt động bằng cách thay thế khung có giới hạn. Tuy nhiên tôi không hiểu những gì đang xảy ra nên nó không hoạt động với kích thước khung hình.

Trả lời

11

Hình chữ nhật khung, trong đó mô tả vị trí và kích thước của view trong SuperView của của hệ toạ độ.

@property (nonatomic) CGRect khung

Các giới hạn hình chữ nhật, trong đó mô tả vị trí và kích thước của view trong riêng của mình hệ thống phối hợp.

@property (nonatomic) CGRect tiếp giáp

Sử dụng giới hạn, không khung.

+0

Cảm ơn! Thay thế 'khung hình' bằng các giới hạn hoạt động! Tuy nhiên, tôi thực sự không hiểu tại sao? Bất kỳ cơ hội để làm cho nó làm việc với khung? Không hiểu lý do tại sao kích thước của UIView khác với giám sát và trong hệ tọa độ riêng của nó – s1m0n

+0

Từ sự hiểu biết của tôi điều đó xảy ra vì khung nhìn nằm trên cửa sổ và cửa sổ đó phải có chế độ nằm ngang, nếu bằng cách nào đó gần đúng, tọa độ xem tại hệ tọa độ cửa sổ không phản ánh xoay khi cửa sổ được xoay cùng với chế độ xem và đó là chế độ xem phụ. Bạn có thể muốn làm mới kiến ​​thức hệ thống phối hợp để hiểu rõ hơn (xoay vòng và có thể quá trình chuyển đổi phải đủ cho trường hợp này): http://en.wikipedia.org/wiki/Cartesian_coordinate_system Đó là một môn toán học như tôi nhớ. –

+1

Có thể sẽ đáng đọc qua http://stackoverflow.com/questions/1210047/iphone-development-whats-the-difference-between-the-frame-and-the-bounds và một số câu hỏi được liên kết. –

2

Đặt autoresizingMask thành bất kỳ chế độ xem nào bạn muốn tự động chỉnh khi xoay. Như thế này:

[myView setAutoresizingMask:UIViewAutoresizingMaskFlexibleWidth | UIViewAutoresizingMaskFlexibleRightMargin]; 
+1

Cảm ơn câu trả lời. Nhưng tôi không cố gắng để cho ứng dụng của tôi tự động sửa hay gì đó. Chế độ phong cảnh là đủ cho tôi. Vì vậy, nó không nên autorotate hoặc bất cứ điều gì, tôi chỉ muốn nó để trở về kích thước cảnh quan chính xác. – s1m0n

0

Vấn đề là vì trước khi tải vào chế độ Landscape dòng code của bạn là cách gọi phương thức tải trong đó phương pháp bạn đang gọi [PASectionView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, 180)]; [self addSubview:sectionView]; này nếu nó là quan điểm điều khiển lớp sau đó nó phải được [PASectionView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 180)]; [self addSubview:sectionView]; nếu nó là phân lớp của UIView thì bạn đã nhận được phương thức ViewDidLoad ở đâu. Bây giờ để giải quyết vấn đề của bạn trong .h lớp học: viết này PASectionView * sectionXem; trong .m lớp thực hiện phương pháp này

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{ 
    if (toInterfaceOrientation == UIInterfaceOrientationPortrait) 
{ 

} 
else // OrientationLandscape 
{ 
sectionView.frame = CGRect(sectionView.frame.origin.x,sectionView.frame.origin.y,self.view.frame.size.width,180);  
} 
0

Bạn cần phải thiết lập các thay đổi kích thước mặt nạ Auto cho subview của bạn,

Thêm dòng mã này trước khi thêm subview đến SuperView, nếu subview của bạn được thêm bởi mã. yourSubView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

khác nếu subView của bạn được thêm vào tệp nib, chọn nam châm đường viền và đổi kích thước mặt nạ trong thuộc tính của subView của bạn trong tệp nib.

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