Ändern Rahmen von UISearchBar programmgesteuert, wenn die Orientierung ändert
Habe ich eine Schaltfläche "suchen" und wenn der Benutzer darauf klickt, ich bin anzeigen UISearchBar programmgesteuert. Die Breite der Suchleiste ist (200) nicht Vollbild. Ich bin auf der Suche, wie ein MSWord und die Anzeige der Inhalte in der Suchleiste' tableview. Aber wenn der Benutzer ist in der Mitte der such-und verändert die Orientierung, wie sollte ich die search bar Breite, D. H., selbst.searchDisplayController.Suchleiste.Rahmen und selbst.searchDisplayController.searchResultsTableView.frame.
Unten ist der code, der zum erstellen der Suchleiste:
-(IBAction)searchBar:(id)sender
{
if(!searching)
{
searching = YES;
sBar.frame = CGRectMake(500, 50,250, 44);
[self.view addSubview:sBar];
[searchController setActive:YES animated:YES];
[sBar becomeFirstResponder];
if((currentOrientation == UIInterfaceOrientationLandscapeLeft) ||
(currentOrientation == UIInterfaceOrientationLandscapeRight))
{
self.searchDisplayController.searchBar.frame = CGRectMake(755, 50, 250, 44);
}
else
{
self.searchDisplayController.searchBar.frame = CGRectMake(500, 50, 250, 44);
}
}
}
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString{
[self filterContentForSearchText:searchString scope:
[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]];
//Return YES to cause the search result table view to be reloaded.
return YES;
}
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption
{
[self filterContentForSearchText:[self.searchDisplayController.searchBar text] scope:
[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:searchOption]];
//Return YES to cause the search result table view to be reloaded.
return YES;
}
- (void)searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controller{
/*
Bob: Because the searchResultsTableView will be released and allocated automatically, so each time we start to begin search, we set its delegate here.
*/
[self.searchDisplayController.searchResultsTableView setDelegate:self];
[self.searchDisplayController.searchResultsTableView setBackgroundColor:[UIColor colorWithRed:1 green:1 blue:204/255.0 alpha:1.0]];
}
- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller{
/*
Hide the search bar
*/
float animateTime = 0.3;
CGRect viewFrame = sBar.frame;
viewFrame.origin.y -= (viewFrame.size.height);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:animateTime];
sBar.frame = viewFrame;
[UIView commitAnimations];
[self performSelector:@selector(animationDone) withObject:nil afterDelay:0.3];
}
-(void)animationDone
{
[sBar removeFromSuperview];
searching = NO;
}
-(void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView
{
if((currentOrientation == UIInterfaceOrientationLandscapeLeft) ||
(currentOrientation == UIInterfaceOrientationLandscapeRight))
{
tableView.frame = CGRectMake(755, 100, 250, 400);
}
else
{
tableView.frame = CGRectMake(500, 100, 250, 400);
}
}
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
duration:(NSTimeInterval)duration
{
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
currentOrientation = toInterfaceOrientation;
if((currentOrientation == UIInterfaceOrientationLandscapeLeft) ||
(currentOrientation == UIInterfaceOrientationLandscapeRight))
{
//Search
btnSearch.frame = CGRectMake(920, 5, 40, 40);
self.searchDisplayController.searchBar.frame = CGRectMake(755, 50, 250, 44);
self.searchDisplayController.searchResultsTableView.frame = CGRectMake(755, 100, 250, 400);
}
else
{
//Search
btnSearch.frame = CGRectMake(666, 5, 40, 40);
self.searchDisplayController.searchBar.frame = CGRectMake(500, 50, 250, 44);
self.searchDisplayController.searchResultsTableView.frame = CGRectMake(500, 100, 250, 400);
}
}
Ich bin in der Lage zu erstellen und die Funktionalität, die ist in Ordnung. Aber einzige Problem ist, wenn der Benutzer die änderung der orinentation seine nicht ordnungsgemäß Suchleiste' Breite.
Meine Anwendung muss geliefert werden an diesem Freitag. Bitte genau richtig mich so schnell wie möglich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beantwortung meiner Frage diesen thread zu schließen, als auch um anderen zu helfen.
(1) In willRotateToInterfaceOrientation seine in der Lage, UISearchBar Herkunft. Breite kommt 768 (volle Bildschirmbreite des iPad im Hochformat), aber origin scheint hier eingestellt werden.
(2) Nach der Ausrichtung ändern, fertig, wir können in der Suchleiste die Breite. Mit kleinen Animationen wird es glatt Größe ändern.
(3) ich rufe resetFrame an beiden pre & post-Orientierung-APIs zu vermeiden, einige plötzliche JURK Art für die Suchleiste.
Unten ist die Lösung, die ich für mein app.