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