2010-09-08 47 views
5

Tôi có một UIPopoverController có chứa UITableView. Cửa sổ bật lên được thay đổi kích thước trong chức năng -viewDidAppear của bộ điều khiển chế độ xem để phù hợp với nội dung của bảng. Trong khi cửa sổ bật lên thay đổi kích thước đúng cách, mũi tên của nó thường không còn trỏ đến bản gốc CGRect. Có cách nào để buộc cửa sổ bật lên định vị lại chính nó sau khi thay đổi kích thước để mũi tên của nó hướng vào mục tiêu dự định của nó không?Điều chỉnh vị trí UIPopoverController sau khi đổi kích thước

EDIT: tôi không thể thiết lập kích thước của popover trong -viewDidLoad kể từ khi xem bảng không tải dữ liệu của nó cho đến khi -viewDidAppear được gọi, và kết quả là tôi không biết những gì kích thước popover nên đến lúc đó . Ngoài ra, tôi thay đổi kích thước cửa sổ bật lên khi một trong các ô xem bảng được nhấp để hiển thị một chế độ xem khác và điều này cũng dẫn đến mũi tên không còn trỏ vào mục tiêu dự định của nó nữa.

+0

Bạn có thể đặt kích thước của cửa sổ bật lên trước khi bảng được tải. Hai điều hoàn toàn tách biệt. Những gì bạn đang làm là thiết lập kích thước của khung đóng gói; nếu kích thước nội dung thực của 'UITableView' dài hơn, bạn sẽ nhận được thanh cuộn, giống như những gì xảy ra khi bạn tải chế độ xem bảng trên iPhone và nội dung cao hơn 480 pixel. –

+0

@Shaggy Frog: Tôi muốn tránh các thanh cuộn khi có thể. – titaniumdecoy

+0

Một lần nữa, bạn hiểu lầm. Nói chung, nếu nội dung trong 'UITableView' cao hơn khung của nó, nó sẽ hiển thị thanh cuộn. Đó là một chủ đề hoàn toàn riêng biệt với những gì bạn đang hỏi, đó là điều chỉnh khung của một khung nhìn popover, mà tôi đã giải thích làm thế nào để làm. –

Trả lời

6

Tôi nghĩ rằng đây có thể là một cách sai lầm để giải quyết vấn đề này, vì bạn phải thực hiện lại hành vi tích hợp có vị trí cho mũi tên bắt đầu.

Tôi không đổi kích thước nội dung popover trong viewDidAppear. Tôi đặt contentSizeForViewInPopover tài sản trong viewDidLoad phương pháp điều khiển quan điểm của, ví dụ:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.contentSizeForViewInPopover = CGSizeMake(320, 155); // sized for a 3-row UITableView 
} 

(cảnh báo nhanh: nếu bạn đang phát triển một ứng dụng phổ quát, mã này sẽ gây ra một vụ tai nạn thời gian chạy trên các thiết bị chạy 3.1.x và bên dưới.)

Bạn cũng có thể đặt kích thước nội dung cho bộ điều khiển cửa sổ bật lên trước khi trình bày, điều này sẽ giúp bạn giải quyết vấn đề của mình. Kiểm tra các tài sản popoverContentSize.

+0

Cảm ơn, nhưng điều đó sẽ không hoạt động trong tình huống của tôi; xem câu hỏi được cập nhật của tôi. – titaniumdecoy

+1

@titaniumdecoy nó sẽ hoạt động, xem phản ứng của tôi –

+0

@ popagcontent ếch xù xì là ý tưởng hay 'self.popoverController.popoverContentSize = CGSizeMake (320, 300);' sẽ thực hiện công việc.cảm ơn người đàn ông –

3

Theo this answer, bạn có thể gọi presentPopoverFromRect:inView: trên cửa sổ bật lên một lần nữa và nó sẽ đặt lại vị trí mũi tên. Tôi chưa tự mình thử nghiệm điều này.

+2

Đây là tài liệu trong Q & A QA1694 kỹ thuật: http://developer.apple.com/iphone/library/qa/qa2010/qa1694.html –

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