UIView не изменяет размер на полный экран при сокрытии военно-морской панели и панели вкладок

У меня нет доступа к SQL Server дома, таким образом, я, предполагают синтаксис здесь, но это более или менее:

DECLARE @names VARCHAR(500)

SELECT @names = @names + ' ' + Name
FROM Names
37
задан SuperBiasedMan 25 August 2015 в 10:26
поделиться

10 ответов

У меня была точно такая же проблема, когда я анимировал панель вкладок и панель навигации в нижней и верхней части экрана соответственно, оставляя пустое пространство высотой 49 пикселей на месте панели вкладок.

Оказывается, причина, по которой мое новое «полноэкранное» представление на самом деле не заполняло пространство, заключалась в том, что я добавлял полноэкранный вид в качестве подпредставления представления контроллера навигации, которое само было дочерним элементом контроллера панели вкладок.

Чтобы исправить это, я просто добавил новое полноэкранное представление (в вашем случае представление со всем текстом) в качестве подпредставления представления UITabBarController.

[[[self tabBarController] view] addSubview:yourTextView];

Затем все, что вам нужно сделать, это убедиться, что рамка вашего подпредставления 480 x 320 пикселей, и он должен заполнить экран (включая область, которая раньше была загадочным белым пространством)

29
ответ дан 27 November 2019 в 04:56
поделиться

Добавьте дополнительное пространство к измерению вида, поэтому, если это был прямоугольник CGRectMake (0,0,320,460), сделайте его CGRectMake (0,0,320,480) ... Это случилось со мной , Я не совсем уверен, почему, это может быть связано с основным представлением, которое вы помещаете поверх текстового представления, но просто добавление измерения должно сделать это

-1
ответ дан 27 November 2019 в 04:56
поделиться

Пытались ли вы заставить текст «перезаписать» сам себя (сбрасывая свойство .text любого используемого вами объекта)? У меня было много случаев, когда представления просто не перепроверяли и не перерисовывали свои данные, и принуждение, кажется, было единственным решением. Если это нехорошо с точки зрения взаимодействия с пользователем, вы можете попробовать сделать панели навигации / вкладок прозрачными после того, как пользователь коснется их, но до того, как они исчезнут. Обычно это расширяет вид до полного размера экрана.

0
ответ дан 27 November 2019 в 04:56
поделиться

Если вы используете Interface Builder, убедитесь, что автоматическое изменение размера установлено правильно в инспекторе размеров. Если вы создаете UITextView в коде, убедитесь, что вы установили достаточно большой фрейм и что родительский элемент представления (и его родительский элемент) также достаточно велик. Для простоты добавьте вид непосредственно в окно, а затем двигайтесь оттуда внутрь.

Чтобы переместить вид в его супервизор:

- (void)moveViewToSuperview:(UIView *)view
{
    UIView *newSuperview = [[view superview] superview];
    [view removeFromSuperview];
    [newSuperview addSubview:view];
    [newSuperview bringSubviewToFront:view];
}
0
ответ дан 27 November 2019 в 04:56
поделиться

Может быть, есть другое представление, которое является встроенной частью области панели вкладок? То есть что-то еще, что нужно скрыть. Это поможет вам увидеть, какие виды открываются вокруг.

for (UIView *viewy in [self.navigationController.view subviews])
{
    NSLog([viewy description]);
}
2
ответ дан 27 November 2019 в 04:56
поделиться

Попытайтесь сделать 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. Если установлено значение «да», нижняя панель будет скрываться, если контроллер помещен в стек навигации.

1
ответ дан 27 November 2019 в 04:56
поделиться

Вы установили в контроллере представления. hidesBottomBarWhenPushing свойство до ДА ? Вам необходимо установить это в методе initWithNibName: bundle: или initWithCoder: . Когда он попадает в навигационный контроллер, он должен скрыть панель вкладок и расширить представление содержимого до самого низа.

3
ответ дан 27 November 2019 в 04:56
поделиться

Я бы переместил представление в окно, когда вы выберете полноэкранный режим. например,

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, чтобы заставить его вращаться ...?)

1
ответ дан 27 November 2019 в 04:56
поделиться

Я считаю, что проблема в том, что вы все еще находитесь в контроллере панели вкладок. Я столкнулся с некоторыми проблемами и с этим, и в итоге создал два представления для управления делегатом моего приложения, панель вкладок контроллер и отдельный uiview, содержащий все, что контроллер панели вкладок пытается взять на себя. Вы могли бы передать свое представление делегату приложения и, возможно, использовать его там?

1
ответ дан 27 November 2019 в 04:56
поделиться

Вы определенно можете сделать что-то, что выглядит правильным, сдвинув рамку представления так, чтобы панель вкладок была за пределами экрана. Я знаю, что кто-то еще упомянул попытку этого, и вы сказали, что это не сработало, но я подозреваю, что проблема в том, что у вас не было правильной настройки маски изменения размера текстовых представлений, когда вы пытались. Ниже приведен код, который должен работать:

- (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. Полосы переключаются всякий раз, когда начинается касание, так что просто коснитесь экрана. Очевидно, что в реальном приложении вам может потребоваться настроить вид прокрутки, чтобы содержимое не прыгало.

5
ответ дан 27 November 2019 в 04:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: