点击时更改 TableView 高度(在 xib 中使用自动布局)

Posted

技术标签:

【中文标题】点击时更改 TableView 高度(在 xib 中使用自动布局)【英文标题】:Change TableView height When Tapped(using autolayout in xib) 【发布时间】:2016-03-02 11:38:47 【问题描述】:

我的 ViewController 在最初加载时是这样的:

当点击显示按钮时,它必须改变如下:

我的代码是:

- (IBAction)show:(id)sender 
 [self change];
 [tableView reloadData];

- (IBAction)close:(id)sender  
 [self change];
 [tableView reloadData];


-(void)change
  //assigning initial bounds to frame-1
  CGRect frame1=CGRectMake(0, _pastProcessTV.frame.origin.y, self.view.bounds.size.width, self.pastProcessTV.bounds.size.height); 
  //assigning new bounds to frame-2
  CGRect frame2=CGRectMake(0, **CGFloat y**,self.view.bounds.size.width,***CGFloat height***);

   if (_showFullButton.isTouchInside) 
          tableView.frame = frame2;
    
   else
          tableview.frame = frame1;
   

我尝试了不同的方法。它不起作用。任何人都可以帮我提供 Y 坐标和宽度

【问题讨论】:

你在这使用自动布局吗? 是的,我正在使用自动布局 检查***.com/a/35746197/2963912 @techlorr: 这个链接只属于这个页面 @uday.m 不确定你是否有过这个排序,但如果没有,你需要更改约束,而不是 tableView 的框架。更改框架是自动布局之前的旧方法。请参阅我发布的关于某人为 UIView 设置动画的问题的答案,尽管这里的原理完全相同。 ***.com/a/26635410/2507277 【参考方案1】:

当您使用自动布局时,您必须获取 tableview 的 topconstraint 的出口,并且当您想要扩展它时将其值设置为 0

所以它会按预期工作

如果您使用的是 ios 7

[self.view layoutIfNeeded] 是必填项

【讨论】:

然后致电[self.view layoutIfNeeded] @techlorr:最初在 tableView 和导航栏之间还有一些其他的出口,比如图像视图和按钮。你能用一些示例代码解释一下吗 然后使用 layoutguide 或 superview 进行顶部约束 @techlorr: 你能给出第 1 帧和第 2 帧的约束吗【参考方案2】:

如果你必须使用自动布局,请尝试像这张图片

Make Layout Constraint Property

试试这段代码

#import "ViewController.h"

@interface ViewController ()

    CGFloat oldtableViewTopValue;


@property (weak, nonatomic) IBOutlet NSLayoutConstraint *tableViewTopLC;
@end

@implementation ViewController

- (void)viewDidLoad 
    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.


- (void)didReceiveMemoryWarning 
    [super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.


- (void) viewWillAppear:(BOOL)animated

    [super viewWillAppear:animated];

    [self.view setNeedsLayout];
    [self.view layoutIfNeeded];

    oldtableViewTopValue = _tableViewTopLC.constant;


- (IBAction)showBtnAction:(id)sender

    [UIView animateWithDuration:0.5f animations:^

        _tableViewTopLC.constant = (_tableViewTopLC.constant==oldtableViewTopValue ? 0 : oldtableViewTopValue);

        [self.view setNeedsLayout];
        [self.view layoutIfNeeded];
    ];

@end

【讨论】:

【参考方案3】:

请关闭 Storyboard 的自动布局

【讨论】:

以上是关于点击时更改 TableView 高度(在 xib 中使用自动布局)的主要内容,如果未能解决你的问题,请参考以下文章

ios tableView的header高度不对

Swift - 在 Xib 中动态设置 UITableView 高度

swift中tableView的单元格高度扩展时更改标签文本

点击时UITableViewCell高度问题

如何隐藏导航栏+工具栏并在滚动时更改tableView高度

在多个视图移动时更改旋转布局