2015-12-14 2 views
1

У меня проблема с Xcode раскадровкой и динамически показаны виды.Xcode раскадровка с динамическими видами

я 3 вертикально выровненных взгляды в моем раскадровки и каждый из них связаны друг с другом с верх-низ отношения с ограничениями

Однако во время выполнения Я хочу, чтобы скрыть 2-ю точку зрения и заменить его место с 3' (это tableview), и чтобы заполнить как 2-е, так и 3-е места, я пытаюсь увеличить высоту tableview. Однако я не могу добиться успеха. Я пробовал много вещей, но ближе всего, что я получаю, чтобы преобразовать 3-ий вид на 2-е место, но высота остается той же

Мой последний код в ниже

if (status) { 

     self.filterView.hidden = NO; 
     self.contentTable.frame = contentTableFrame; 

    } else { 

     self.filterView.hidden = YES; 
     CGFloat predictedHeight = self.contentTable.frame.size.height+(self.contentTableFrame.origin.y-self.filterView.frame.origin.y); 
    self.contentTable.transform = CGAffineTransformMakeTranslation(0,  self.filterView.frame.origin.y-self.contentTable.frame.origin.y); 

     for (NSLayoutConstraint *constraint in self.contentTable.constraints) { 
      if (constraint.firstAttribute == NSLayoutAttributeHeight) { 
       constraint.constant = predictedHeight; 
      } 

     } 

    } 

Вы также можете найти скриншот ограничения 3-го представления. Что я должен сделать, чтобы исправить это? Кто-нибудь знает об этом?

enter image description here

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

 self.contentTable.transform = CGAffineTransformMakeTranslation(0,  self.filterView.frame.origin.y-self.contentTable.frame.origin.y); 

Для того, чтобы исправить это я пытался изменить его высоту (с .frame = CGRectMake (.....)) но не work.Then я пытался масштабировать 3-й вид (который является табличным представлением), и он преуспевает, но поскольку я масштабировал его, все ячейки внутри таблицы также масштабируются, а внешний вид таблицы нарушен. Поэтому я не смог найти решение этой проблемы. Казалось, это вызов.

Благодаря

+0

создать IBOutlet для высоты ограничения 2 View и присвоить ему значение 0, если вы не хотите это для отображения. 3-й вид автоматически заполнит оставшуюся область. – Gandalf

+0

, если вы не беспокоитесь о версии iOS для развертывания, вы можете использовать Stackview – Jaimish

ответ

0

Извините, что в объективе-c. Я получаю верхний признак из TableView (Storyboard). Когда я скрываю topView, я получаю высоту моего topView и изменяю верхнюю константу ограничения. Вы можете увидеть это в @IBAction. Наконец, tableView растягивается и занимает пространство, оставшееся от topView. Это то, что вы искали?

ViewController.h

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController<UITableViewDataSource, UITableViewDelegate> 

@property (weak, nonatomic) IBOutlet UIView *topView; 
@property (weak, nonatomic) IBOutlet UITableView *tableView; 
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *topTableViewConstraint; 

- (IBAction)pushTest:(id)sender; 
@end 

ViewController.m

- (IBAction)pushTest:(id)sender { 
    if (self.topView.hidden) { 
     self.topTableViewConstraint.constant = 0; 
    }else{ 
     self.topTableViewConstraint.constant = -self.topView.bounds.size.height; 
    } 
    self.topView.hidden = !self.topView.hidden; 
} 
0

вы можете скрыть filterview, но вы не можете заменить его Tableview. , если вы хотите заменить его табличным представлением. Вам нужно использовать метод BringSubviewToFront для этого Tableview.it, который приведет к тому, что tablview будет впереди, и установите filterview обратно, которое скрыто для ui.

+0

Но это не решение для меня, я уже могу скрыть filterView с помощью filterView.hidden = YES, но я хочу заполнить его местом с помощью tableView. – tolgatanriverdi