У меня нет доступа к SQL Server дома, таким образом, я, предполагают синтаксис здесь, но это более или менее:
DECLARE @names VARCHAR(500)
SELECT @names = @names + ' ' + Name
FROM Names
У меня была точно такая же проблема, когда я анимировал панель вкладок и панель навигации в нижней и верхней части экрана соответственно, оставляя пустое пространство высотой 49 пикселей на месте панели вкладок.
Оказывается, причина, по которой мое новое «полноэкранное» представление на самом деле не заполняло пространство, заключалась в том, что я добавлял полноэкранный вид в качестве подпредставления представления контроллера навигации, которое само было дочерним элементом контроллера панели вкладок.
Чтобы исправить это, я просто добавил новое полноэкранное представление (в вашем случае представление со всем текстом) в качестве подпредставления представления UITabBarController.
[[[self tabBarController] view] addSubview:yourTextView];
Затем все, что вам нужно сделать, это убедиться, что рамка вашего подпредставления 480 x 320 пикселей, и он должен заполнить экран (включая область, которая раньше была загадочным белым пространством)
Добавьте дополнительное пространство к измерению вида, поэтому, если это был прямоугольник CGRectMake (0,0,320,460), сделайте его CGRectMake (0,0,320,480) ... Это случилось со мной , Я не совсем уверен, почему, это может быть связано с основным представлением, которое вы помещаете поверх текстового представления, но просто добавление измерения должно сделать это
Пытались ли вы заставить текст «перезаписать» сам себя (сбрасывая свойство .text любого используемого вами объекта)? У меня было много случаев, когда представления просто не перепроверяли и не перерисовывали свои данные, и принуждение, кажется, было единственным решением. Если это нехорошо с точки зрения взаимодействия с пользователем, вы можете попробовать сделать панели навигации / вкладок прозрачными после того, как пользователь коснется их, но до того, как они исчезнут. Обычно это расширяет вид до полного размера экрана.
Если вы используете Interface Builder, убедитесь, что автоматическое изменение размера установлено правильно в инспекторе размеров. Если вы создаете UITextView в коде, убедитесь, что вы установили достаточно большой фрейм и что родительский элемент представления (и его родительский элемент) также достаточно велик. Для простоты добавьте вид непосредственно в окно, а затем двигайтесь оттуда внутрь.
Чтобы переместить вид в его супервизор:
- (void)moveViewToSuperview:(UIView *)view
{
UIView *newSuperview = [[view superview] superview];
[view removeFromSuperview];
[newSuperview addSubview:view];
[newSuperview bringSubviewToFront:view];
}
Может быть, есть другое представление, которое является встроенной частью области панели вкладок? То есть что-то еще, что нужно скрыть. Это поможет вам увидеть, какие виды открываются вокруг.
for (UIView *viewy in [self.navigationController.view subviews])
{
NSLog([viewy description]);
}
Попытайтесь сделать TabBarControllers больше экрана, чтобы панель вкладок была скрыта за экраном, если вы сделаете это до , новый ViewController будет установлен, затем его view будет изменять размер, чтобы заполнить новый фрейм!
В моем тесте я использовал метод делегата tabBarController: shouldSelectViewController:, чтобы проверить, какой контроллер представления собирается стать текущим, и соответственно установить TabBarController.view.frame. Например:
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
if( viewController == second)
tabBarController.view.frame = CGRectMake( 0, 20, 320, 500);
else
tabBarController.view.frame = CGRectMake( 0, 20, 320, 460);
}
Если это все еще не совсем то, что вам нужно, попробуйте изучить свойство hidesBottomBarWhenPasted объекта UIViewController. Если установлено значение «да», нижняя панель будет скрываться, если контроллер помещен в стек навигации.
Вы установили в контроллере представления. hidesBottomBarWhenPushing
свойство до ДА
? Вам необходимо установить это в методе initWithNibName: bundle:
или initWithCoder:
. Когда он попадает в навигационный контроллер, он должен скрыть панель вкладок и расширить представление содержимого до самого низа.
Я бы переместил представление в окно, когда вы выберете полноэкранный режим. например,
myView = [self.view retain];
self.view = nil;
[window addSubview:myView];
и вернуться назад:
[myView removeFromSuperView];
self.view = myView;
[myView release];
myView = nil;
Добавив представление в качестве дочернего элемента окна, оно может быть полностью полноэкранным и будет находиться поверх панели вкладок.
Затем вы можете объединить это с
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:@"UIDeviceOrientationDidChangeNotification" object:nil];
для обнаружения вращения. (Я думаю, что вы объедините это с view.transform = CGAffineTransformMakeRotation, чтобы заставить его вращаться ...?)
Я считаю, что проблема в том, что вы все еще находитесь в контроллере панели вкладок. Я столкнулся с некоторыми проблемами и с этим, и в итоге создал два представления для управления делегатом моего приложения, панель вкладок контроллер и отдельный uiview, содержащий все, что контроллер панели вкладок пытается взять на себя. Вы могли бы передать свое представление делегату приложения и, возможно, использовать его там?
Вы определенно можете сделать что-то, что выглядит правильным, сдвинув рамку представления так, чтобы панель вкладок была за пределами экрана. Я знаю, что кто-то еще упомянул попытку этого, и вы сказали, что это не сработало, но я подозреваю, что проблема в том, что у вас не было правильной настройки маски изменения размера текстовых представлений, когда вы пытались. Ниже приведен код, который должен работать:
- (void)viewDidLoad {
[super viewDidLoad];
currentlyHidden = NO;
}
- (void) hideStuff {
SO2AppDelegate *appDelegate = (id)[[UIApplication sharedApplication] delegate];
self.navigationController.navigationBarHidden = YES;
CGRect newFrame = appDelegate.tabBarController.view.frame;
newFrame.size.height += appDelegate.tabBarController.tabBar.frame.size.height;
appDelegate.tabBarController.view.frame = newFrame;
}
- (void) showStuff {
SO2AppDelegate *appDelegate = (id)[[UIApplication sharedApplication] delegate];
CGRect newFrame = appDelegate.tabBarController.view.frame;
newFrame.size.height -= appDelegate.tabBarController.tabBar.frame.size.height;
appDelegate.tabBarController.view.frame = newFrame;
self.navigationController.navigationBarHidden = NO;
}
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
if (currentlyHidden) {
[self showStuff];
currentlyHidden = NO;
} else {
[self hideStuff];
currentlyHidden = YES;
}
}
Кроме того, поскольку это определенно зависит от того, как у вас настроены перья и т. Д., Я публикую проект в сети, чтобы вы могли его загрузить и ознакомиться с ним. Это довольно минималистичная демонстрация, просто проект на основе навигации, в котором делегат настраивает контроллер вкладок и встраивает контроллер представления из основного пера. Остальное находится в пике и классе RootViewController. Полосы переключаются всякий раз, когда начинается касание, так что просто коснитесь экрана. Очевидно, что в реальном приложении вам может потребоваться настроить вид прокрутки, чтобы содержимое не прыгало.