2009-07-09 21 views
5

Ứng dụng của tôi dựa trên phong cảnh. Tôi muốn sử dụng MFMailComposeViewController trong cảnh quan nhưng không thể tìm thấy bất cứ điều gì để notifiy nó về định hướng. Trong cảnh quan, MFMailComposeViewController chỉ hiển thị phần trên cùng của cửa sổ soạn thư, đến từ phía bên trái, khi ở chế độ ngang. Về cơ bản nó bao gồm một nửa của màn hình phong cảnh. Có cách nào để cửa sổ soạn thư xuất hiện trong cảnh quan thay vì chân dung không?Hiển thị MFMailComposeViewController trong cảnh quan

--- EDIT --- Quan điểm nơi tôi muốn nạp soạn email có nguồn gốc như thế này:

//from first UIViewController 
[self presentModalViewController:secondView animated:YES]; 

//from secondView (a UIViewController), I load the info view, which is where the mail compose shows 
InfoController *infoController = [[InfoController alloc] initWithNibName:@"Info" bundle:[NSBundle mainBundle]]; 
[self.view addSubview:infoController.view]; 

Từ trên, nhìn mẹ soạn thư là thứ ba một tải . Trong info.plist, tôi làm điều này:

UIInterfaceOrientation = UIInterfaceOrientationLandscapeRight 

Trả lời

6

Nếu bạn trình bày MailViewController trên UIViewController lồng nhau, hãy thử hiển thị nó trên UIViewController chính của bạn. Điều này đã khắc phục vấn đề cho tôi. Tôi vừa chuyển bộ điều khiển chính của mình đến bộ điều khiển chính.

+1

Làm việc cho tôi! Cảm ơn! Tôi cũng đã tìm ra lý do: trình điều khiển chế độ xem chính nằm trong trường hợp của chúng tôi, một nút xoay xử lý và chỉ có một thay đổi đó là UIInterfaceRotation.Các nhà soạn nhạc mail trình bày chính nó theo luân chuyển của viewcontroller – tadejsv

+0

@ Dimitris, bạn sẽ vui lòng gửi cho tôi mẫu – Ravi

+0

@Ravan Tôi không biết tìm nó ở đâu và tôi nghĩ rằng mã 5 tuổi sẽ hữu ích trong iOS dev ... Tôi chắc chắn mọi thứ phải thay đổi đáng kể kể từ đó. – Dimitris

0

Tôi có một ứng dụng cảnh quan, và cho thấy một MFMailComposeViewController dường như làm việc tốt ...

Ứng dụng của tôi phải chuyển sang chế độ chân dung đôi khi vì UIImagePickerController không làm việc trong chế độ phong cảnh, vì vậy tôi sử dụng đoạn mã sau trong quan điểm của tôi để tái thiết lập chế độ phong cảnh ...

self.bounds = CGRectMake(0, 0, 480, 320); 
self.center = CGPointMake(160, 240); 
self.transform = CGAffineTransformMakeRotation(M_PI/2); 

các MFMailComposeViewController nên nhặt những giá trị và biết làm thế nào để hiển thị i tself.

+0

Tôi đang sử dụng đại biểu MFMailComposeViewController trong một UIViewController. Tôi phải sử dụng self.view.bounds và vân vân. Nếu tôi thiết lập những gì bạn trong viewDidLoad của UIViewController, nó sẽ tải chân dung mà tôi không muốn. Nếu tôi làm điều đó ngay trước khi chế độ xem thư được hiển thị, tôi nhận được kết quả tương tự như trong OP. – 4thSpace

+0

loại chế độ xem nào bạn đang hiển thị trước chế độ xem thư? bạn đã nói với hệ điều hành rằng bạn đang ở trong chế độ phong cảnh, hoặc bạn đang làm bản vẽ của riêng bạn và chỉ làm cho nó được sang một bên? –

+0

Xin lỗi vì sự chậm trễ. Tôi đã chỉnh sửa OP để trả lời các câu hỏi của bạn. Xin hãy xem. – 4thSpace

7

Chúng tôi có thể thêm mã sau vào triển khai lớp Ứng dụng ủy quyền để ghi đè tự động xoay bằng trình điều khiển chế độ xem trình soạn thư.

@interface MFMailComposeViewController (AutoRotation) 
// to stop auto rotation 
@end 

@implementation MFMailComposeViewController (AutoRotation) 
// stop auto rotation 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // should support all interface orientations. 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 
@end 
+0

Rất tuyệt! Nó hoạt động hoàn hảo (chỉ có điều là trong IOS 6 tôi sử dụng -shouldAutorotate và -supportedInterfaceOrientations phương pháp thay vì -shouldAutorotateToInterfaceOrientation :). Cảm ơn! – Azpiri

-1

này làm việc cho tôi ...

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // return (YES); 
    return (interfaceOrientation==UIInterfaceOrientationLandscapeRight); 
} 

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) 
    { 
     ...... 
    } 
}  
0

Cố gắng gửi "presentModalViewController:" để rootViewController của cửa sổ ứng dụng của bạn (trong appdelegate).

Tôi nghĩ rằng đó là công việc đối với tôi vì MFMailComposeViewController không thể ép buộc định hướng rootViewController, nhưng có thể buộc định hướng của viewControllers được đẩy bởi navigationController của rootViewController.

Bạn cần một cái gì đó như thế này:

[((AppDelegate *)[UIApplication sharedApplication]).window.rootViewController presentViewController:mailVC animated:YES]; 
Các vấn đề liên quan