2010-06-15 29 views
7

Tôi có một UIView nhỏ sẽ luôn xuất hiện ở giữa màn hình. Điều này hoạt động tốt cho chế độ dọc nhưng không ở chế độ ngang.Luôn ở giữa UIView

Để vẽ UIView tôi sử dụng:

myView.frame = CGRectMake((visibleArea.size.width - MY_VIEW_WIDTH)/2, (visibleArea.size.height - MY_VIEW_HEIGHT)/2, MY_VIEW_WIDTH, MY_VIEW_HEIGHT); 
myView.autoresizingMask = (
          UIViewAutoresizingFlexibleTopMargin | 
          UIViewAutoresizingFlexibleBottomMargin | 
          UIViewAutoresizingFlexibleLeftMargin | 
          UIViewAutoresizingFlexibleRightMargin 
          ); 

ý tưởng Bất kỳ những gì có thể thiếu?

Trả lời

21

Tại sao không thử

myView.center = controller.view.center

+0

Điều này làm việc cho tôi mọi lúc. – Kyle

+1

Cảm ơn câu trả lời, mặc dù cá nhân, tôi muốn biết tại sao mã của người đăng không hoạt động như mong đợi ... –

1

Có thể bạn không thay đổi hướng của thanh trạng thái. Nếu bạn không làm điều này, thiết bị nghĩ rằng hướng vẫn chân dung, không phải là cảnh quan.

+0

Tôi không chạm vào thanh trạng thái và nó thực sự thay đổi vị trí khi tôi xoay giao diện. Vấn đề là không có vấn đề gì trong giao diện nào là giao diện bạn luôn nhận được giới hạn của chế độ dọc khi yêu cầu [[UIScreen mainScreen] bounds]. Điều này rõ ràng là không hữu ích khi người dùng khởi động ứng dụng ở chế độ ngang. Khác thì việc autoresizing dường như bị nhầm lẫn bởi một cái gì đó. –

+0

Mmmm, cố gắng lấy khung bằng [[UIScreen mainScreen] applicationFrame]. Tôi không chắc chắn nếu khung này thay đổi với định hướng nhưng, nếu không làm điều đó, có được hướng thiết bị và, nếu nó trong cảnh quan, chuyển đổi chiều rộng và chiều cao. – emenegro

+0

nó giống với khung –

2

Sản phẩm tự động ứng dụng luân phiên?

Ý tôi là, phương pháp -[UIViewController shouldAutorotateToInterfaceOrientation:] của bạn trông như thế nào? Bạn có định hướng ban đầu và được hỗ trợ trong tệp Info.plist của mình không?

Kiểm tra chế độ xem của cha mẹ autoresizesSubviews thuộc tính.

1

Tôi đã tạo thuộc tính để cung cấp cho tôi giới hạn, dựa trên hướng của thiết bị. (Đây là một danh mục trên màn hình chính.)

- (CGRect)boundsWithRespectToOrientation 
{ 
    CGRect bounds = self.bounds; 

    if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation]) && bounds.size.height > bounds.size.width) 
     bounds = CGRectMake(bounds.origin.x, bounds.origin.y, bounds.size.height, bounds.size.width); 
    else if (UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication] statusBarOrientation]) && bounds.size.width > bounds.size.height) 
     bounds = CGRectMake(bounds.origin.x, bounds.origin.y, bounds.size.height, bounds.size.width); 

    return bounds; 
} 
+0

Điều này có thực sự làm gì không? Nó vẫn trả về cùng giá trị ... –

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