Подтвердить что ты не робот

Элементы управления iOS скрываются и исчезают как Android

Я использовал раскадровку с autolayout для моего дизайна пользовательского интерфейса. В основном в Android есть три различных свойства, например Visible, Invisible и Gone.

Например:

   1) android:visibility="gone" // used to hide the control and as well as space
      (or)
      CONTROLNAME.setVisibility(View.GONE);
   2)  android:visibility="invisible" // used to hide the control but it will take space
      (or)
      CONTROLNAME.setVisibility(View.INVISIBLE);

В iOS

Цель-с

  1) ?
  2) [CONTROLNAME setHidden:TRUE]; // used to hide the control but it will take space

быстрое

  1) ?
  2) CONTROLNAME.isHidden = true  // used to hide the control but it will take space

для выполнения функции Ушел в iOS. Я искал в Google, но не могу найти решение.

4b9b3361

Ответ 1

Чтобы удалить пространство, занимаемое представлением (control), можно либо уменьшить size его кадра до нуля, либо удалить его из иерархии представления. То есть вызывая removeFromSuperview на элементе управления.

Например, если вам нужно удалить пространство, занимаемое UITextField (скажем CONTROLNAME), вы можете либо использовать:

CGRect tempFrame = CONTROLNAME.frame;
CGSize currentSize = tempFrame.size; //for later use
tempFrame.size = CGSizeZero;
CONTROLNAME.frame = tempFrame;

или

CGRect currentFrame = CONTROLNAME.frame; //for later use
[CONTROLNAME removeFromSuperview];

UPDATE:

В первом случае вам нужно будет сохранить более ранний размер, чтобы вернуть элемент управления в исходное положение.

CGRect tempFrame = CONTROLNAME.frame;
tempFrame.size = currentSize; //set to initial value
CONTROLNAME.frame = tempFrame;

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

CONTROLNAME.frame = currentFrame;

Ответ 2

если ваше представление например

@property (weak, nonatomic) IBOutlet SearchBarView *searchBar;

уже имеет ограничение с ним. Добавьте новый IBLayout, перетащив ваше ограничение в файл .h file.ex:

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *constraintSearBarHeight;

и сделайте это, когда захотите

self.constraintSearBarHeight.constant = 0;

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

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.searchBar attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:0]];

Ответ 3

Ни удаление субвизора, ни настройка кадра, работающего на меня, как альтернативное решение, я программно добавил ограничение, которое автоматически корректирует разницу.

Например: если у вас есть 3 вида, A_view B_view и C_view вертикально выровнены в этом порядке, и вы хотите "Скрыть" B, а также отрегулируйте разницу, добавьте ограничение

B_view.removeFromSuperView()
var constr = NSLayoutConstraint(item: C_view, 
                                attribute: NSLayoutAttribute.Top, 
                                relatedBy: NSLayoutRelation.Equal, 
                                toItem: A_view, 
                                attribute: NSLayoutAttribute.Bottom,
                                multiplier: 1,
                                constant: 20)
view.addConstraint(constr)

константа (в данном случае) величина вертикального пространства между C_view и A_view

Он работал у меня, но требует знания ограничений

Ответ 4

Вы должны создать IBOutlets для каждого из трех подпредставлений. Затем вы можете показать/скрыть каждый из них непосредственно из этих ссылок. Если вы скрываете представление, оно автоматически скрывает свои подпредставления.

@IBOutlet var yourStackView: UIStackView! yourStackView.hidden = true;

Другое решение:

Если у вас есть теги для каждого вида, вы можете скрыть и отобразить их, используя:

Цель C

Для сокрытия:

[[self.view viewWithTag:1] setHidden:YES];

Показаны:

[[self.view viewWithTag:1] setHidden:NO];

В Swift:

Скрытие:

self.view.viewWithTag(1)?.hidden = true

Показаны:

self.view.viewWithTag(1)?.hidden = false

Примечание: Это просто для скрытого просмотра, а не для сокращения пространства. Если вам нужно уменьшить пространство с помощью скрытого просмотра, вам нужно ограничить увеличение увеличения с помощью скрытия/показа программным способом. И представление стека делает это автоматически, где вы просто изменяете фактическую высоту представления стека с помощью Hide/Show.

Может быть, это поможет вам, иначе вы можете спросить меня.