Xcode 具有动态视图的故事板

Xcode storyboard with dynamic views

我对 Xcode 故事板和动态显示视图有疑问。

我的情节提要中有 3 个垂直对齐的视图,每个视图都通过约束的上下关系相互链接

但是在运行时我想隐藏第二个视图并将其位置替换为第三个视图(tableview)并填充我试图扩展的第二个和第三个位置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 视图约束的屏幕截图。我应该怎么做才能解决这个问题?有人知道吗?

这个问题我还有另一种解决方法。但我也有另一个问题。 当我执行下面的代码行时,我的第三个视图移动到第二个视图的位置,但它的高度保持不变,所以在页面底部它恰好看起来是空白 space。

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

为了解决这个问题,我尝试更改它的高度(使用 .frame = CGRectMake(.....) ) 但它没有 work.Then 我试图缩放第三个视图(这是一个 table 视图)并且它成功了但是因为我已经缩放了 table 内的所有单元格视图也按比例缩放并且 table 的视觉外观已损坏。所以我无法找到解决该问题的方法。 这似乎是一个挑战。

谢谢

您可以隐藏过滤器视图,但不能用 table视图替换它。 如果你想用 table 替换它 view.You 需要使用方法 BringSubviewToFront 为此 Tableview.it 会将那个 tablview 放在前面并将 filterview 设置到后面,这对于 ui 是隐藏的。

抱歉,它在 objective-c。 我从 TableView(情节提要)中获得了最高约束。当我隐藏 topView 时,我得到 topView 的高度并更改顶部约束常量。你可以在@IBAction 中看到它。最后,tableView 被拉伸并占据 topView 左边的 space。那是你要找的吗?

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;
}