在我的应用程序中,我有一个UISearchBarunder,UINavigationBar因此它始终对用户可见.在这种情况下,我必须设置contentInset额外的44px,因此UIScrollView将滚动UISearchBar (完全像在Contacts.app中).静态UITableView的没有问题,但在我的情况下,我必须重新加载它的内容,切换到UISearchDisplayController等等.所以当我打电话时:
[self.tableView setContentInset:UIEdgeInsetsMake(108, 0, 0, 0)];
Run Code Online (Sandbox Code Playgroud)
一切都有效,直到我拉动刷新......(为此我使用SSPullToRefresh).
所以我的问题是:如何contentInset永久设置,以便我不必担心内部数据发生任何变化UITableView?
我以前用过UIScrollView,现在正在使用它,从来没有遇到过问题.我现在将它添加到一个旧的应用程序,虽然它按预期工作(我可以看看内容,用我的手指滚动,所有的边界和大小设置正确,所以内容中没有空白的空间,等等.),我只是无法scrollToRectVisible上班.我甚至简化了调用,以便它只移动到0,0位置:
[scrollView scrollRectToVisible:CGRectMake(0, 0, 10, 10) animated:YES];
Run Code Online (Sandbox Code Playgroud)
或将其移至0,200:
[scrollView scrollRectToVisible:CGRectMake(0, 200, 10, 10) animated:YES];
Run Code Online (Sandbox Code Playgroud)
我甚至做了一个快速的应用来测试这个,我可以scrollRectToVisible像我期望的那样去那里工作.但在我的旧应用程序中,我似乎无法做任何事情.
我可以使用scrollView滚动setContentOffset:,但这不是我想要的.
此scrollView及其内容由IB在nib中定义,并与IBOutlet一起使用.我在我的应用程序中使用的唯一代码来处理scrollView是
[scrollView setContentSize:CGSizeMake(scrollView.contentSize.width, imageView.frame.size.height)];
Run Code Online (Sandbox Code Playgroud)
(我只对垂直滚动而不是水平感兴趣).
有没有人遇到这样的问题?
我比较了两个应用程序中的scrollView属性,它们是相同的.
附录:
我的scrollViews框架是:0.000000 0.000000 480.000000 179.000000
我的scrollViews contentSize是:0.000000 324.000000
它仍然像我想要滚动到的矩形已经可见,并且不需要滚动.不确定这是不是正在发生的事情.这只是最神奇的事情.似乎很容易解决这个问题......
附录#2:
这就是我没有做的事情scrollRectToVisible:
CGPoint point = myRect.origin;
if (![clefScrollView pointInside:point withEvent:nil]) {
point.x = 0;
if (point.y > clefScrollView.contentSize.height - clefScrollView.bounds.size.height)
point.y = clefScrollView.contentSize.height - clefScrollView.bounds.size.height;
[clefScrollView setContentOffset:point animated: YES];
}
Run Code Online (Sandbox Code Playgroud)
关于此scrollView的其他所有内容都按预期工作,但是scrollRectToVisible.为什么?!?任何疯狂的猜测?
我有一个tableView,我在顶部插入行.
虽然我这样做,但我希望当前视图保持完全静止,因此只有向上滚动时才会显示行.
我已经尝试保存底层UIScrollview的当前位置并在插入行之后重置位置,但这导致抖动,上下,尽管它最终返回到同一位置.
有没有一个很好的方法来实现这一目标?
更新:我使用的是beginUpdate,然后是insertRowsAtIndexPath,endUpdates.没有reloadData调用.
scrollToRowAtIndexPath跳转到当前单元格的顶部(在添加行之前保存).
我试过的另一种方法,最终以正确的速度结束,但有一个颤抖的是.
save tableView currentOffset. (Underlying scrollView method)
Add rows (beginUpdates,insert...,endUpdates)
reloadData ( to force a recalulation of the scrollview size )
Recalculate the correct new offset from the bottom of the scrollview
setContentOffset (Underlying scrollview method)
Run Code Online (Sandbox Code Playgroud)
麻烦是reloadData导致scrollview/tableview开始短暂滚动,然后setContentOffset将它返回到正确的位置.
有没有办法让tableView在没有开始显示的情况下计算出它的新尺寸?
将整个事物包装在beginAnimation commitAnimation中也没有多大帮助.
更新2:这显然可以完成 - 当您下载更新时,请参阅官方Twitter应用程序.
当UITextField嵌入在a中的a UIScrollView成为第一响应者时,通过让用户输入某个字符,UIScrollView自动滚动到该字段,有没有办法禁用它?
我UIScrollView在页面上有一些.您可以单独滚动它们或将它们锁定在一起并将它们滚动为一个.锁定时会出现问题.
我使用UIScrollViewDelegate并scrollViewDidScroll:跟踪运动.我查询contentOffset的UIScrollView哪些改变,然后反映他们的设置更改为其他滚动视图contentOffset属性相匹配.
很棒....除了我注意到很多额外的电话.以编程方式更改contentOffset我的滚动视图会触发scrollViewDidScroll:调用委托方法.我尝试过使用setContentOffset:animated:,但我仍然在委托上获得触发器.
如何以编程方式修改contentOffsets以不触发scrollViewDidScroll:?
实现说明....每个UIScrollView都是自定义的一部分,UIView它使用委托模式回调到UIViewController处理协调各种contentOffset值的呈现子类.
我在contentInsets中遇到了一些奇怪的东西
我的故事板中有一个UITextView,其中contentInset为50,因为我正在尝试在我的uitextview中添加一些填充
但是,uitextview底部会出现一个滚动条,如下面的测试所示:
我的印象是contentInset压缩uitextview而不会导致这个水平滚动条,所以如何删除对水平滚动条的需要并使所有内容 - 插入和uitextview中的所有文本 - 可见而不需要滚动条.
注意:我不是要求防止水平滚动或不显示滚动条(因此切割文本)
非常感谢!
对于atomk(UITextView称为ss)
NSLog(@"Content Size Before %f",self.ss.contentSize.width); Logs: 280
CGSize size=self.ss.contentSize; size.width=size.width-50;
[self.ss setContentSize:size];
NSLog(@"Content Size After %f",self.ss.contentSize.width); Logs: 230
Run Code Online (Sandbox Code Playgroud)
有没有比加入前添加的代码视图之间明显的区别,因此,一些地方出了错!(谢谢)
好吧,我有几个UITextFields并且UITextViews在里面UIScrollView,我想设置键盘在scrollview触摸或滚动时消失(当然,当你在文本字段/视图内部触地时).
我目前尝试这样做是替换UIScrollView子类,并将其设置为在touchesBegan方法内调用removeKeyboard函数(在主视图控制器中定义).但是,这只会移除键盘以进行正常触摸,而不是仅在滚动视图时.那么,删除内部键盘的最佳方法是UIScrollView什么?
在此先感谢您的帮助.
我目前正在尝试使用UICollectionView实现UITableView重新排序行为.
让我们调用一个UItableView电视和一个UICollectionView CV(以澄清以下解释)
我基本上试图重现电视的拖放,但我没有使用编辑模式,一旦触发长按手势,单元就可以移动了.它完美地工作,我使用CV的移动方法,一切都很好.
我更新CV的contentOffset属性以在用户拖动单元格时处理滚动.当用户转到顶部和底部的特定矩形时,我更新了contentOffset和CV滚动.问题是当用户停止移动手指时,手势不会发送任何更新,这会使滚动停止并在用户移动手指后立即重新开始.
这种行为绝对不自然,我宁愿继续滚动,直到用户发布CV,就像电视中的情况一样.电视拖放体验很棒,我真的想重现同样的感觉.有没有人知道他们在重新排序时如何管理电视中的滚动?
我对此没有任何想法,所以如果有人有答案,我会嫁给他!
以下是longPress方法的实现:
- (void)handleLongPress:(UILongPressGestureRecognizer *)sender
{
ReorganizableCVCLayout *layout = (ReorganizableCVCLayout *)self.collectionView.collectionViewLayout;
CGPoint gesturePosition = [sender locationInView:self.collectionView];
NSIndexPath *selectedIndexPath = [self.collectionView indexPathForItemAtPoint:gesturePosition];
if (sender.state == UIGestureRecognizerStateBegan)
{
layout.selectedItem = selectedIndexPath;
layout.gesturePoint = gesturePosition; // Setting gesturePoint invalidate layout
}
else if (sender.state == UIGestureRecognizerStateChanged)
{
layout.gesturePoint = gesturePosition; // Setting gesturePoint invalidate layout
[self swapCellAtPoint:gesturePosition];
[self manageScrollWithReferencePoint:gesturePosition];
}
else
{
[self.collectionView performBatchUpdates:^
{
layout.selectedItem = nil;
layout.gesturePoint = CGPointZero; …Run Code Online (Sandbox Code Playgroud) 如何将表格的单元格滚动到特定位置?我有一个表格显示3行(根据高度).我要的是,如果我点击第一行不是根据表的高度的第一行应滚动并获得新的位置(中心)和同为其他行.我试过contenOffset但没有工作..
编辑:
简而言之,当我们选择选择器中的任何行时,数据选择器会将某些行滚动到中心.
谢谢..
我把一个UIScrollView放在我的笔尖中view,并将它与一个IBOutlet属性相关联.
现在,当我在我的viewDidLoad方法中执行此操作时,它似乎对以下内容没有影响contentSize:
self.sv.backgroundColor = [UIColor yellowColor]; // this works
CGSize size = CGSizeMake(1000.0, 1000.0);
[self.sv setContentSize:size]; // this does not
Run Code Online (Sandbox Code Playgroud)
它表现得好像contentSize与框架相同.这是怎么回事?当我关闭AutoLayout时,这开始工作.为什么?
uiscrollview ×10
ios ×5
objective-c ×5
iphone ×4
uitableview ×3
uikit ×2
cocoa-touch ×1
keyboard ×1
scroll ×1
swift ×1
uitextfield ×1