Изменить размер для панели в состоянии вызова?

Если вы хотите добавить прослушиватель событий для нажатия кнопки, просто выберите кнопки и добавьте прослушиватели в цикле:

document.querySelectorAll("button").forEach(e => e.addEventListener("click", myFunc));

Кроме того, прослушайте любой щелчок, а затем проверьте, если событие цель - кнопка:

document.addEventListener("click", (e) => if (e.target.tagName == "BUTTON") myFunc());
23
задан john.k.doe 27 June 2012 в 04:20
поделиться

10 ответов

Что вы имеете в виду, когда говорите, что «свойства изменения размера не включены для корневого UIView»?

Строка состояния при вызове не имеет какого-либо специального специального обозначения, и я не Не думаю, что есть какие-либо API или уведомления вокруг него. Вместо этого ваши представления должны быть просто настроены на автоматическое изменение размера.

Попробуйте создать новое приложение на основе навигации в XCode и изучите параметры авторазмера в табличном представлении в RootViewController.xib. Надеюсь, вы увидите разницу между тем, что установлено Apple, и тем, что вы установили в своем проекте.

6
ответ дан 29 November 2019 в 01:01
поделиться

Вы ищете - [UIApplication statusBarFrame], и ​​в своем UIApplicationDelegate вы должны реализовать этот метод делегата, чтобы получать уведомления о том, когда изменяется рамка строки состояния:

- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame  
16
ответ дан 29 November 2019 в 01:01
поделиться

Вид может не изменяться автоматически при изменении размера строки состояния, если у вас не установлен контроллер корневого представления. Первоначально я имел это в своем делегате приложения, и мое приложение работало должным образом во всех отношениях, за исключением того, что оно не будет корректно изменяться во время телефонных звонков.

[self.window addSubview:rootController.view];

Я изменил вышеприведенную строку на эту, и теперь мое приложение автоматически изменяет размеры во время звонков.

[self.window setRootViewController:rootController];

Я обнаружил это исправление, увидев это в журнале и выяснив причину.

Application windows are expected to have a root view controller at the end of application launch
7
ответ дан 29 November 2019 в 01:01
поделиться

это прекрасно работает для меня, когда мое приложение работает в фоновом режиме, и я нажимаю команду + T. В моем сценарии корневой контроллер - это контроллер панели вкладок, и я перенастраиваю свой контроллер навигации внутри каждой вкладки.

- (void)application:(UIApplication *)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame{
[UIView animateWithDuration:0.35 animations:^{
    CGRect windowFrame = ((UINavigationController *)((UITabBarController *)self.window.rootViewController).viewControllers[0]).view.frame;
    if (newStatusBarFrame.size.height > 20) {
        windowFrame.origin.y = newStatusBarFrame.size.height - 20 ;// old status bar frame is 20
    }
    else{
        windowFrame.origin.y = 0.0;
    }
    ((UINavigationController *)((UITabBarController *)self.window.rootViewController).viewControllers[0]).view.frame = windowFrame;
}];

}

7
ответ дан 29 November 2019 в 01:01
поделиться

Для таких представлений, как UITableView, вам обычно нужно изменить высоту ячейки таблицы, и нет другого способа сделать это, кроме как реализовать приложение : didChangeStatusBarFrame: . Но это не важно, и вы можете установить высоту строки на нецелые значения, если вам нужно.

3
ответ дан 29 November 2019 в 01:01
поделиться

Уведомление об изменении фрейма строки состояния:

UIApplicationWillChangeStatusBarFrameNotification

Зарегистрироваться в качестве наблюдателя:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarFrameWillChange:)name:UIApplicationWillChangeStatusBarFrameNotification object:nil];

Затем ответить на изменение в вашем обработчике:

- (void)statusBarFrameWillChange:(NSNotification*)notification { // respond to changes }

Даже при правильной настройке автоматического размещения, вам может потребоваться реагировать на изменения. Например, табличное представление, которое вычисляет высоту своей ячейки на основе заданного пространства на экране, может нуждаться в reloadData после изменения строки состояния.

Документация

2
ответ дан 29 November 2019 в 01:01
поделиться

У меня была такая же проблема. То, что я сделал, было этим.

  1. Откройте файл xib в IB
  2. Все элементы интерфейса по умолчанию прикреплены для перемещения вместе с верхом и отображаются в свойстве «Авторазмер» в «Инспекторе размеров». Таким образом, для элементов пользовательского интерфейса внизу экрана удалите ссылку сверху, а вместо этого сделайте ссылку снизу. Оставь все остальные как есть.
  3. Проблема решена !!!

Надеюсь, что все ясно.

1
ответ дан 29 November 2019 в 01:01
поделиться

Вам придется обновлять виды вручную, если вы устанавливаете свои рамки просмотра программно

 -(void) viewDidAppear:(BOOL)animated
{
    [[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(statusBarFrameWillChange:)name:UIApplicationWillChangeStatusBarFrameNotification object:nil];

}

- (void)statusBarFrameWillChange:(NSNotification*)notification
{
// respond to changes
NSLog(@"STATUS BAR UPDATED");
NSDictionary *statusBarDetail = [notification userInfo];
NSValue *animationCurve = statusBarDetail[UIApplicationStatusBarFrameUserInfoKey];
CGRect statusBarFrameBeginRect = [animationCurve CGRectValue];
int statusBarHeight = (UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication]statusBarOrientation])) ? statusBarFrameBeginRect.size.height : statusBarFrameBeginRect.size.width;

NSLog(@"status bar height  %d", statusBarHeight);
}

-(void) viewDidDisappear:(BOOL)animated
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationBackgroundRefreshStatusDidChangeNotification object:nil];
}

Это дает вам новую высоту строки состояния, и с ее помощью вы можете соответствующим образом обновить свои рамки.

1
ответ дан 29 November 2019 в 01:01
поделиться

Решение состоит в том, чтобы убедиться, что вы сделали свой ключ окна:

[window makeKeyAndVisible];

Если вы этого не сделаете, размер подпредставления не изменится автоматически, но, насколько я знаю, других симптомов нет .

0
ответ дан 29 November 2019 в 01:01
поделиться

Ни одно из ранее опубликованных решений не сработало для меня. Что сработало для меня, так это то, что у меня не были должным образом установлены ограничения для моих взглядов. В моей ситуации у меня было два разных вида контейнера.

View of scene in storyboard.

Нижний (в списке) вид контейнера был UITableView, который не прокручивался правильно до нижней части таблицы. Причина заключалась в том, что смещение строки состояния вызова вызывало изменение источника (левый верхний угол) UITableView, но размер оставался таким же. Это означало, что нижняя часть таблицы была за кадром!

Решением было правильно установить ограничение высоты Autoresizing . На скриншоте ниже это вертикальные стрелки в середине поля Авторазмер .

enter image description here

0
ответ дан 29 November 2019 в 01:01
поделиться
Другие вопросы по тегам:

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