2010-03-05 2 views
12

배너의 하단에 50px를 허용했기 때문에 내 앱의 표보기가 전체 화면 높이를 차지하지 않습니다.iPhone SDK : UISearchDisplayController의 표보기 크기 설정

검색 창에 입력을 시작하면 검색 결과 테이블보기가 더 커집니다. 검색 막대와 탭 표시 줄 사이의 사용 가능한 모든 화면 공간을 채 웁니다. 이는 마지막 검색 결과가 배너에 의해 가려 짐을 의미합니다.

UISearchDisplayController에서 사용하는 테이블보기의 크기는 어떻게 지정합니까? 내가 볼 수있는 경계 또는 프레임 속성이 없습니다.

편집에 추가하려면 SCREENSHOTS :

이 테이블보기는 IB에서 설정하는 방법입니다. 합성 된 탭 표시 줄이 50px 부족합니다.

alt text http://iphone.lightwood.net/StackOverflow/gstableviewinib.png

이 일반적으로 어떻게 내용을 표시합니다. 나는 아주 밑바닥으로 스크롤했다. alt text http://iphone.lightwood.net/StackOverflow/gstableviewatbottom.png

검색 할 때 표시되는 방식입니다. 다시 말하지만, 나는 맨 아래로 스크롤했습니다. 배너 광고를 비활성화하면 검색 표시 테이블이 탭 표시 줄 바로 아래로 펼쳐지는 것을 볼 수 있습니다. 나는 완전히 당신이 설명하고 이해 확실하지 않다

alt text http://iphone.lightwood.net/StackOverflow/gssearchviewatbottom.png

+0

또한 테이블 뷰의 다른 높이를 시도 했으므로 검색 결과가 항상 화면 아래쪽으로 확장됩니다. 문제는 검색 창 자체가 ~ 50 픽셀이라는 점이 아니라 배너를 모두 뒤집어 쓰는 것입니다. –

답변

50

이 문제를 해결하는 열쇠는 테이블보기의 모양을 언제 바꿀 것인지를 찾는 것이 었습니다. 전화 :

[self.searchDisplayController.searchResultsTableView setFrame:someframe]; 

UISearchDisplayController를 만든 후에는 쓸데없는 것입니다. 대답이 위임 방법이었다

-(void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView { 
    tableView.frame = someframe; 
} 

주, 나 또한 -searchDisplayController:didLoadSearchResultsTableView을 시도했지만 거기에 좋은하지 않았다. 크기가 표시 될 때까지 기다려야합니다.

tableView.frame = otherTableView.frame 만 지정하면 검색 결과 테이블이 해당 검색 막대와 겹치므로 검색을 지우거나 취소 할 수 없습니다.

내 마지막 코드는 다음과 같이 보았다 : 나는 깊은 뷰 계층 구조를 허용하는 코드를 업데이트

-(void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView { 

    CGRect f = self.masterTableView.frame; // The tableView the search replaces 
    CGRect s = self.searchDisplayController.searchBar.frame; 
    CGRect newFrame = CGRectMake(f.origin.x, 
           f.origin.y + s.size.height, 
           f.size.width, 
           f.size.height - s.size.height); 

    tableView.frame = newFrame; 
} 
+0

그 친구에게 감사드립니다. 그것은 나를 미치게했다! –

+0

'someframe' 선언하는 법? – user2872856

+0

@ user2872856'tableView.frame'은 CGRect이므로 다음과 같이 할 수 있습니다 : CGRect someframe = CGRectMake (CGFloat x, CGFloat y, CGFloat width, CGFloat height); – BigHeadCreations

0

, 스크린 샷을 가지고 좋은 것입니다.

UITableView는 화면의 크기이고 배너는 아래쪽의 50 픽셀과 겹치고 있습니다. 모든 UIView 하위 프레임, 경계 및 공통 UIView 부모로부터 상속하는 가운데 속성이 있습니다.

@interface UIView(UIViewGeometry) 

// animatable. do not use frame if view is transformed since it will not correctly reflect the actual location of the view. use bounds + center instead. 
@property(nonatomic) CGRect   frame; 

// use bounds/center and not frame if non-identity transform. if bounds dimension is odd, center may be have fractional part 
@property(nonatomic) CGRect   bounds;  // default bounds is zero origin, frame size. animatable 
@property(nonatomic) CGPoint   center;  // center is center of frame. animatable 
@property(nonatomic) CGAffineTransform transform; // default is CGAffineTransformIdentity. animatable 
// ... from UIView.h 

당신은 당신이 원하는대로 당신은 단순히 화면보다 작은 50 픽셀로 경계를 조정해야처럼 소리, 이러한 속성을 조작하고, 새로운 센터를 계산하는 몇 가지 계산을 할 수 있습니다.

+0

몇 가지 스크린 샷을 추가했습니다. 필자는 어느 시점에서도 검색 테이블 디스플레이의 지오메트리를 설정하고 있지 않습니다. 내가 어디 있는지 알아낼 수 있다면 대답 일거야 ...하지만 UISearchDisplayController의 searchResultsTableView 속성은 읽기 전용입니다. –

+0

searchResultsTableView 속성은 읽기 전용이지만 제어기의 핸들을 변경할 수 없다는 것을 의미하므로 tableview 자체를 조작 할 수 있어야합니다. – slf

+0

http://developer.apple.com/iphone/library/samplecode/TableSearch/index.html – slf

1

하지만, 반투명 커버 뷰의 초기 프레임은 여전히 ​​검색 창 아래의 전체 창을 차지 .

-(void)searchDisplayController: (UISearchDisplayController*)controller 
didShowSearchResultsTableView: (UITableView*)tableView 
{ 
    if ([controller.searchBar.superview isKindOfClass: [UITableView class]]) 
    { 
     UITableView* staticTableView = (UITableView*)controller.searchBar.superview; 

     CGRect f = [tableView.superview convertRect: staticTableView.frame fromView: staticTableView.superview]; 
     CGRect s = controller.searchBar.frame; 
     CGRect newFrame = CGRectMake(f.origin.x, 
            f.origin.y + s.size.height, 
            f.size.width, 
            f.size.height - s.size.height); 

     tableView.frame = newFrame; 
    } 
}