【问题标题】:Xcode storyboard with dynamic views具有动态视图的 Xcode 故事板
【发布时间】:2016-03-19 21:05:33
【问题描述】:

我对@9​​87654323@ 故事板和动态显示视图有疑问。

我的故事板中有 3 个垂直对齐的视图,每个视图都通过上下关系与约束相互链接

但是在运行时我想隐藏第二个视图并用第三个视图替换它的位置(这是一个tableview)并填充第二个和第三个位置我试图扩展@的高度987654325@。 但是我不能成功。我已经尝试了很多东西,但我得到的最接近的是将第三个视图转换为第二个位置,但高度保持不变

我的最新代码在下面

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

       }

    }

您还可以找到第三个视图的约束的屏幕截图。我应该怎么做才能解决这个问题?有人知道吗?

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

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

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

谢谢

【问题讨论】:

  • 为第二个视图的高度约束创建一个 IBOutlet 并在您不希望它显示时将其赋值为 0。第三个视图将自动填充剩余区域。
  • 如果你不担心部署iOS版本你可以使用Stackview

标签: ios objective-c xcode xcode-storyboard


【解决方案1】:

对不起,它在objective-c中。 我从 TableView(故事板)中获得了最高的约束。当我隐藏 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;
}

【讨论】:

    【解决方案2】:

    您可以隐藏filterview,但不能用tableview替换它。 如果你想用表格视图替换它。你需要为那个表格视图使用方法 BringSubviewToFront。它会将那个 tablview 带到前面并将 filterview 设置为后面,这对 ui 是隐藏的。

    【讨论】:

    • 但这不是我的解决方案,我已经可以通过 filterView.hidden = YES 隐藏 filterView 但我想要的是用 tableView 填充它的位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 2011-12-17
    • 2015-10-23
    • 1970-01-01
    相关资源
    最近更新 更多