视图不粘在顶部(不改变位置)
Posted
技术标签:
【中文标题】视图不粘在顶部(不改变位置)【英文标题】:View does not stick on top (does not change position) 【发布时间】:2016-09-17 13:26:25 【问题描述】:我试图在滚动时将 UIView 粘贴在顶部。尝试使用*** 上建议的 max(x:T, y:T) 方法,但它不起作用。我设法检测到何时应该重新定位滚动视图,但更新框架没有任何影响。
import UIKit
class ViewController: UIViewController, UIScrollViewDelegate
@IBOutlet var objectView: UIView!
@IBOutlet var scrollView: UIScrollView!
//var originalOffsetY : CGFloat!
//var originalOffestX : CGFloat!
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let size = CGSize.init(width: self.view.frame.width, height: self.view.frame.height*2)
scrollView.contentSize = size
scrollView.backgroundColor = UIColor.blueColor()
objectView.backgroundColor = UIColor.whiteColor()
scrollView.delegate = self
scrollView.addSubview(objectView)
// override func viewWillAppear(animated: Bool)
// originalOffsetY = objectView.frame.origin.y
// originalOffestX = objectView.frame.origin.x
//
func scrollViewDidScroll(scrollView: UIScrollView)
print("ScrollView \(scrollView.contentOffset.y)")
print("ObjectView \(objectView.frame.origin.y)")
let location = CGPointMake(0, scrollView.contentOffset.y)
let size = objectView.frame.size
if scrollView.contentOffset.y >= objectView.frame.origin.y
objectView.frame = CGRect.init(origin: location, size: size)
print("Detected \(objectView.frame)")
// var newRect = objectView.frame
// newRect.origin.y = max(originalOffsetY!, scrollView.contentOffset.y)
// objectView.frame = newRect
条件匹配成功,如Logs 所示。但观点不变。我需要 objectView 滚动一点.. 从 y=270 左右滚动到 0 .. 但不能超出它。
【问题讨论】:
如果您需要 objectView 在 scrollView 滚动时保持原样,而不是使其成为 scrollView 的子视图,为什么不改为使它们成为兄弟视图(即,使 objectView 成为 viewController 视图的子视图与滚动视图一起)?例如,当我尝试在表格视图上实现搜索栏时,这就是我所做的事情 - 一般来说,我发现它更简单! @Sparky - 我需要 objectView 从 y=270 左右滚动到 0 .. 但不能超过它。 【参考方案1】:您需要跟踪视图在滚动视图中的原始位置,并使用该值进行计算,这是一个非常简化的示例:
class StickyScrollViewController: UIViewController
var stickyView = UIView(frame: CGRect(x: 0, y: 100, width: 300, height: 100))
var originalStickyOrigin: CGPoint = CGPoint(x: 0, y: 100)
func scrollViewDidScroll(_ scrollView: UIScrollView)
var nextYOffset = max(originalStickyOrigin.y, scrollView.contentOffset.y)
stickyView.frame = CGRect(x: 0, y: nextYOffset, width: 300, height: 100)
【讨论】:
在代码中创建视图时工作。不在故事板中以上是关于视图不粘在顶部(不改变位置)的主要内容,如果未能解决你的问题,请参考以下文章
UICollectionView 自定义布局页脚视图不粘在集合视图的底部
如何在 UITableView 顶部添加一个一起滚动的视图,但在滚动后粘在顶部