Ios 滚动UITableView时如何创建NSLayoutConstraint

Ios 滚动UITableView时如何创建NSLayoutConstraint,ios,objective-c,uitableview,uiscrollview,nslayoutconstraint,Ios,Objective C,Uitableview,Uiscrollview,Nslayoutconstraint,我在SingleView上有UITableView。表视图具有左0、右0、下0、上520的约束。我需要在向上滚动时将top 520更改为0,在向下滚动时返回520。我怎么能做到呢。 如何从滚动中更改NSLayoutConstraint- - (void)scrollViewDidScroll:(UIScrollView *)scrollView 我试图实现so,但失败了 - (void)scrollViewDidScroll:(UIScrollView *)scrollView{

我在SingleView上有
UITableView
。表视图具有左0、右0、下0、上520的约束。我需要在向上滚动时将top 520更改为0,在向下滚动时返回520。我怎么能做到呢。 如何从滚动中更改
NSLayoutConstraint
-

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
我试图实现so,但失败了

 - (void)scrollViewDidScroll:(UIScrollView *)scrollView{

    if (scrollView.tag == 1){

        if (scrollView.contentOffset.y < pointNow.y) {

            self.heightLogTabTableView.constant = 0;

            [UIView animateWithDuration:0.5f animations:^{
                [self.view layoutIfNeeded];
            }];

        }else if (scrollView.contentOffset.y > pointNow.y) {

            self.heightLogTabTableView.constant = 520;
            [UIView animateWithDuration:0.5f animations:^{
                [self.view layoutIfNeeded];
            }];
        }
    }
}
-(无效)scrollViewDidScroll:(UIScrollView*)scrollView{
if(scrollView.tag==1){
if(scrollView.contentOffset.ypointNow.y){
self.heightLogTabTableView.constant=520;
[UIView动画宽度:0.5f动画:^{
[self.view layoutifneed];
}];
}
}
}

这一行代码将解决所有
顶部、底部、左侧、右侧
限制为
零的问题

[self.tableView setContentInset:UIEdgeInsetsMake(520, 0, 0, 0)];

这一行代码将解决所有
顶部、底部、左侧、右侧

[self.tableView setContentInset:UIEdgeInsetsMake(520, 0, 0, 0)];

更改约束常量后,请立即尝试setNeedsUpdateConstraints方法。比如:

[self.tableView setNeedsUpdateConstraints];
更新-

如果我没弄错的话,我想这就是你想要的:

-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{

    if(self.heightLogTabTableView.contentOffset.y<0){
        //it means table view is pulled down like refresh
    }
    else if(self.heightLogTabTableView.contentOffset.y >= 0) {
        //it means table view is being scrolled up
    }    
}
-(void)ScrollViewWillendDraging:(UIScrollView*)带速度的scrollView:(CGPoint)速度targetContentOffset:(inout CGPoint*)targetContentOffset{
if(self.heightLogTabTableView.contentOffset.y=0){
//这意味着正在向上滚动表视图
}    
}

希望这对您有所帮助。

更改约束常数后,请立即尝试setNeedsUpdateConstraints方法。比如:

[self.tableView setNeedsUpdateConstraints];
更新-

如果我正确理解你,我想这就是你所要寻找的:

-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{

    if(self.heightLogTabTableView.contentOffset.y<0){
        //it means table view is pulled down like refresh
    }
    else if(self.heightLogTabTableView.contentOffset.y >= 0) {
        //it means table view is being scrolled up
    }    
}
-(void)ScrollViewWillendDraging:(UIScrollView*)带速度的scrollView:(CGPoint)速度targetContentOffset:(inout CGPoint*)targetContentOffset{
if(self.heightLogTabTableView.contentOffset.y=0){
//这意味着正在向上滚动表视图
}    
}

希望这对您有所帮助。

替换
[self.view layoutifneed]通过--
[\u tableView beginUpdates]
[\u tableView endUpdates]。现在也修改变量pointNow,如下所示

#import "ViewController.h"

@interface ViewController (UIScrollViewDelegate){

}


@end

@implementation ViewController
CGPoint pointNow;

- (void)viewDidLoad{

     [super viewDidLoad];   
     pointNow = CGPointMake(0, 0);

}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{



        if (scrollView.contentOffset.y < pointNow.y) {

            self.heightLogTabTableView.constant = 0;

            [UIView animateWithDuration:0.5f animations:^{
                [_tableView beginUpdates];
                [_tableView endUpdates];
            }];

        }else if (scrollView.contentOffset.y > pointNow.y) {

            self.heightLogTabTableView.constant = 520;
            [UIView animateWithDuration:0.5f animations:^{
                [_tableView beginUpdates];
                [_tableView endUpdates];
            }];
        }
    pointNow = scrollView.contentOffset;

}

@end
#导入“ViewController.h”
@界面视图控制器(UIScrollViewDelegate){
}
@结束
@实现视图控制器
CGPoint pointNow;
-(无效)viewDidLoad{
[超级视图下载];
pointNow=CGPointMake(0,0);
}
-(无效)scrollViewDidScroll:(UIScrollView*)scrollView{
if(scrollView.contentOffset.ypointNow.y){
self.heightLogTabTableView.constant=520;
[UIView动画宽度:0.5f动画:^{
[_tableView开始更新];
[_tableviewendupdates];
}];
}
pointNow=scrollView.contentOffset;
}
@结束

替换
[self.view layoutifneed]通过--
[\u tableView beginUpdates]
[\u tableView endUpdates]。现在也修改变量pointNow,如下所示

#import "ViewController.h"

@interface ViewController (UIScrollViewDelegate){

}


@end

@implementation ViewController
CGPoint pointNow;

- (void)viewDidLoad{

     [super viewDidLoad];   
     pointNow = CGPointMake(0, 0);

}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{



        if (scrollView.contentOffset.y < pointNow.y) {

            self.heightLogTabTableView.constant = 0;

            [UIView animateWithDuration:0.5f animations:^{
                [_tableView beginUpdates];
                [_tableView endUpdates];
            }];

        }else if (scrollView.contentOffset.y > pointNow.y) {

            self.heightLogTabTableView.constant = 520;
            [UIView animateWithDuration:0.5f animations:^{
                [_tableView beginUpdates];
                [_tableView endUpdates];
            }];
        }
    pointNow = scrollView.contentOffset;

}

@end
#导入“ViewController.h”
@界面视图控制器(UIScrollViewDelegate){
}
@结束
@实现视图控制器
CGPoint pointNow;
-(无效)viewDidLoad{
[超级视图下载];
pointNow=CGPointMake(0,0);
}
-(无效)scrollViewDidScroll:(UIScrollView*)scrollView{
if(scrollView.contentOffset.ypointNow.y){
self.heightLogTabTableView.constant=520;
[UIView动画宽度:0.5f动画:^{
[_tableView开始更新];
[_tableviewendupdates];
}];
}
pointNow=scrollView.contentOffset;
}
@结束

请尝试此功能,它将帮助您

-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
{
    if (scrollView.tag != 1)
    {
        return;
    }

    if(self.heightLogTabTableView.contentOffset.y<0)
    {
        self.heightLogTabTableView.constant = 0;

            [UIView animateWithDuration:0.5f animations:^{
                [self.view layoutIfNeeded];
            }];
    }
    else 
    {
        self.heightLogTabTableView.constant = 520;
            [UIView animateWithDuration:0.5f animations:^{
                [self.view layoutIfNeeded];
            }];
    }    
}
-(void)ScrollViewWillendDraging:(UIScrollView*)带速度的scrollView:(CGPoint)速度targetContentOffset:(inout CGPoint*)targetContentOffset
{
如果(scrollView.tag!=1)
{
返回;
}

如果(self.heightLogTabTableView.contentOffset.y请尝试此功能,它将帮助您

-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
{
    if (scrollView.tag != 1)
    {
        return;
    }

    if(self.heightLogTabTableView.contentOffset.y<0)
    {
        self.heightLogTabTableView.constant = 0;

            [UIView animateWithDuration:0.5f animations:^{
                [self.view layoutIfNeeded];
            }];
    }
    else 
    {
        self.heightLogTabTableView.constant = 520;
            [UIView animateWithDuration:0.5f animations:^{
                [self.view layoutIfNeeded];
            }];
    }    
}
-(void)ScrollViewWillendDraging:(UIScrollView*)带速度的scrollView:(CGPoint)速度targetContentOffset:(inout CGPoint*)targetContentOffset
{
如果(scrollView.tag!=1)
{
返回;
}

如果(self.heightLogTabTableView.contentOffset.y我在
.h
文件
中添加了全局变量CGFloat“@property(非原子)CGFloat lastScrollOffset;”

-(无效)scrollViewDidScroll:(UIScrollView*)scrollView{
if(scrollView.tag==1){
如果(scrollView.contentOffset.y>\u lastScrollOffset){
self.heightLogTabTableView.constant=0;
[UIView动画宽度:0.5f动画:^{
[self.view layoutifneed];
}];
}else if(scrollView.contentOffset.y<\u lastScrollOffset){
self.heightLogTabTableView.constant=self.informationTask.frame.size.height;
[UIView动画宽度:0.5f动画:^{
[self.view layoutifneed];
}];
}
_lastScrollOffset=scrollView.contentOffset.y;
}
else if(scrollView.tag==2){
如果(scrollView.contentOffset.y>\u lastScrollOffset){