2011-07-21 33 views
5

Vì vậy, tôi có một view với một loạt nút trong một UIScrollView. Khi người dùng nhấn một nút, tôi muốn một UIPopOverController để hiển thị trỏ vào nút đã chọn. Đó là loại tác phẩm, nhưng cửa sổ bật lên có kích thước sai và trỏ đến một điểm ngẫu nhiên trong chế độ xem. Đây là mã của tôi. Cảm ơn trước.Trợ giúp với kích thước UIPopOverController

-(void)detail:(id)sender{ 
    UIButton *button = sender; 
    NSLog(@"tag = %i", button.tag); 

    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController]; 
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
    self.popover = [[UIPopoverController alloc] initWithContentViewController:navController]; 
    self.popover.delegate = self; 
    [self.popover presentPopoverFromRect:button.bounds inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
} 

Thần vấn đề với kích thước của popover: Trong quan điểm cho rằng là bên trong popover, tôi có:

self.contentSizeForViewInPopover = scroll.contentSize; 
NSLog(@"%f, %f", scroll.contentSize.height, scroll.contentSize.width); 
NSLog(@"showing: %f, %f", self.contentSizeForViewInPopover.height, self.contentSizeForViewInPopover.width); 

và cả các bản ghi được phù hợp. Vì vậy, tôi nghĩ mọi thứ sẽ hoạt động chính xác. Nhưng nó không. Đây là ảnh chụp màn hình. Hãy cho tôi biết nếu bạn cần thêm mã của tôi. Cảm ơn trước.

screen shot of the error

Trả lời

1

Về quy mô của chỉ popover: Tôi quản lý để làm điều đó với một UILabel heighted biến:

UILabel *hinweis; 
hinweis.text = @"..."; 
hinweis.frame = CGRectMake(x,y,width,800); 
[hinweis sizeToFit]; 

Và đối với mũi tên: bạn đã thử một tham số inView khác như self.parentViewController.view chưa?

+0

Trong thời gian chờ đợi, tôi đã học để sử dụng contentOffset cho một tableView, nó phải tương tự cho một scrollView. 'CGRect f = [tableView rectForRowAtIndexPath: indexPath]; CGPoint yOffset = [tableView contentOffset]; CGRect frame = CGRectMake (f.origin.x, f.origin.y + 45 - yOffset.y, 200, 40); [self.poc presentPopoverFromRect: frame ... ' –

+0

Ngoài ra, bạn cần phải khởi tạo UILabel đó. –

23

Điều đầu tiên tôi nhận thấy là bạn nên sử dụng các button.frame không phải là button.bounds cho từ hình chữ nhật. Sự khác biệt giữa các thuộc tính UIView này:

Hình dạng của chế độ xem được xác định bởi khung, giới hạn và trung tâm thuộc tính. Thuộc tính khung xác định nguồn gốc và kích thước của chế độ xem trong hệ tọa độ của người giám sát và thường được sử dụng trong bố cục để điều chỉnh kích thước hoặc vị trí của chế độ xem.

Thuộc tính giới hạn xác định kích thước nội bộ của chế độ xem vì nó nhìn thấy chúng và được sử dụng hầu như chỉ trong mã vẽ tùy chỉnh.

Bạn có thể thiết lập chiều cao của điều khiển popover bạn sử dụng setPopoverContentSize điệp của nó:

// so something like this ... 
[self.popover setPopoverContentSize:CGSizeMake(320, 460)]; 
// and to bind the popover to your button 
[self.popover presentPopoverFromRect:button.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
+0

thay đổi 'presentPopoverFromRect' thành' frame' làm cho nó tốt hơn một chút. Nhưng tôi nghĩ rằng một phần của vấn đề điểm là do thực tế là các nút trong một 'UIScrollView', do đó, khung nút origional không còn là khung khi popover được trình bày. Ngoài ra, tôi không thể đặt khung cửa sổ như vậy vì tôi muốn thay đổi tùy thuộc vào kích thước của văn bản bên trong cửa sổ bật lên – Andrew

+0

@RedBlueThing: Cảm ơn bạn đã làm việc hoàn hảo –

+0

@JaspreetSingh Niềm vui của tôi :) – RedBlueThing

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