Ios 滚动UITableView时如何创建NSLayoutConstraint
我在SingleView上有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{
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){