- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个水平滚动并跨越其父 View 的整个宽度的 Collection View 。我实现分页的廉价方法是将单元格宽度设置为等于 Collection View 宽度的 1/3,并将宽度设置为与左右内容插图相同的宽度。
我在 IB 中禁用滚动并替换为左右滑动识别器。我的代码几乎可以在不设置 contentInset
的情况下运行,但是设置 contentInset
似乎可以防止发生任何滚动
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
CGFloat itemWidth = self.collectionView.bounds.size.width/3.0;
NSInteger count = [self collectionView:self.collectionView numberOfItemsInSection:0];
self.collectionView.contentSize = (CGSize){ .width=itemWidth*count, .height=self.collectionView.bounds.size.height };
// uncomment this line, and the scroll code in the swipes below fails to work
//self.collectionView.contentInset = UIEdgeInsetsMake(0, itemWidth, 0, itemWidth);
self.collectionView.contentOffset = (CGPoint){ .x=self.collectionView.contentSize.width/2.0, .y=0 };
}
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
CGFloat width = self.view.bounds.size.width/3.0;
return (CGSize){ .width=width, .height=collectionView.bounds.size.height };
}
此代码处理滑动...
- (NSIndexPath *)centerIndexPath {
CGRect visibleRect = (CGRect){.origin = self.collectionView.contentOffset, .size = self.collectionView.bounds.size};
CGPoint visiblePoint = CGPointMake(CGRectGetMidX(visibleRect), CGRectGetMidY(visibleRect));
return [self.collectionView indexPathForItemAtPoint:visiblePoint];
}
- (void)swipeLeft:(UISwipeGestureRecognizer *)gr {
NSIndexPath *centerIndexPath = [self centerIndexPath];
NSLog(@"at %@", centerIndexPath);
if (centerIndexPath.row < [self collectionView:self.collectionView numberOfItemsInSection:0]-1) {
[self.collectionView scrollToItemAtIndexPath:centerIndexPath atScrollPosition:UICollectionViewScrollPositionLeft animated:YES];
}
}
- (void)swipeRight:(UISwipeGestureRecognizer *)gr {
NSIndexPath *centerIndexPath = [self centerIndexPath];
NSLog(@"at %@", centerIndexPath);
if (centerIndexPath.row > 0) {
[self.collectionView scrollToItemAtIndexPath:centerIndexPath atScrollPosition:UICollectionViewScrollPositionRight animated:YES];
}
}
除了我在上面的设置中设置 contentInsets 之外,所有这些都有效。然后,即使我在调试器中到达 scrollToItemAtIndexPath: 代码,也不会发生滚动。
拥有这些插图很重要,因为我希望用户了解中心项目是所选项目。
有人可以解释为什么 contentInset 会破坏滚动以及如何修复吗?
最佳答案
看起来 UICollectionView 有自己的内置方式来处理插入:
使用部分插入调整内容的边距部分插图是一种调整可用于布置单元格的空间的方法。您可以使用 insets 在节的页眉 View 之后和页脚 View 之前插入空格。您还可以使用 insets 在内容的两侧插入空格。图 3-5 演示了插入如何影响垂直滚动流布局中的某些内容。
图 3-5 Section insets 改变布局单元格的可用空间
关于ios - 设置 contentInset 后 UICollectionView 不滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45580623/
我正在进行一个项目,该项目为 UIImagePickerController 制作自定义 'Move and Scale' Controller。 (如果 imagePickerController.
我想将我的 contentInset 修改为动画标签的原点,因为它正在动画(我正在降低标签,我想将 View 滚动到标签的原点,因为它正在动画,这样它看起来就像它静止不动一样) 最佳答案 您可以像这样
有没有办法设置contentInset在 SwiftUI 上 List ?我需要调整底部插图以使最后一个项目在底部按钮上方可见。 我目前的解决方案如下Section(header: Color.cle
有人可以向我解释一下 UIScrollView 实例中的 contentInset 属性的用途吗?也许提供一个例子? 最佳答案 它设置内容 View 和封闭 ScrollView 之间的插图距离。 O
我在 TableView 中有一个文本框,当用户选择一个开关时,它会出现(变得可见)并弹出一个键盘,当用户关闭开关时,TextBox 消失并且键盘隐藏。在键盘出现和消失期间,我想将 tableView
我正在尝试实现一个自定义顶部栏,它的行为类似于 iOS 11+ 大标题导航栏,当向下滚动内容时,该栏的大标题部分会折叠: 不同之处在于我的栏需要一个自定义高度以及一个在滚动时不会折叠的底部部分。我设法
我有一个自定义 UIView,其中有一个 UIScrollView 作为 subview 。我的问题是当 View 调整大小时,我希望调整 ScrollView 的大小并将其 contentInset
我正在构建一个示例,我可以在其中发表评论,我每次发表评论时都使用 tableView 添加一个单元格。它主要被处理但是当我想发表评论时我遇到了一个问题,tableview 底部与键盘高度相同但为空,如
这是我的 View ,左边是键盘不显示时的 View ,右边是键盘显示时我想要实现的 View 。 我所有的字段都被添加到一个 ScrollView ,然后我像这样设置约束,field1 topCon
谁能帮我解决一个我想不通的动画问题。我在“拉动刷新”中实现了以下代码。 [UIView beginAnimations:nil context:NULL]; [UIView setAnimationD
我已经在方法- (void)viewDidLoad 中设置了tableView的contentInset,属性是self.tableView.contentInset = UIEdgeInsetsMa
我尝试将自定义 contentInset 设置为 UISearchdisplayControllers searchResultsTableView。 初始化后 _searchController =
我在 UITextView 中显示文本。我需要对文本应用一些填充。当我将值(value)用于最高职位时,它正在工作。如果我将值用于其他位置,则它不起作用。 txtt_bgImage = [U
我有一个带有表格单元格的表格 View 。每个单元格都有一个文本字段。我有以下代码来防止底部的几个单元格被键盘挡住 @objc func keyboardWillShow(_ notification
我遇到了一个问题,contentInset 无法让 UIScrollView 使用键盘弹出窗口。它有点有效:出于某种原因我需要大数字(可能高于 View 的高度?)才能做任何事情,尽管 content
我正在为 iOS 7 重构我的应用程序,我在 QLPreviewController 的顶部和下方有一个带有 UIToolBar 的 View Controller 。我将 UIToolBar tra
我想要一些剩余空间,10 像素,到 UITablViewcCell。我在下面编写代码,但它的内容是水平滚动的。我不想要那个。 self.tableView = [[UITableView alloc]
在 iOS 上,当您在 WKWebView 的 ScrollView 上设置 contentInset 时,它似乎让 Web View 认为页面的内容比它大是。例如,如果您为一个大部分为空的页面提供顶
我对 contentInsent 有奇怪的问题。我正在实现“拉动和释放”以在 UITableView 上刷新并且一切正常,但在某些情况下我想在没有用户交互的情况下显示“加载”状态。所以我想我将按以下方
当键盘被隐藏时, ScrollView 应该回到它的原始 contentInset,但它在 iOS7 中不起作用。在显示键盘时设置 scrollview 的 contentInset 是有效的,但是当
我是一名优秀的程序员,十分优秀!