2016-09-17 3 views
0

Я пытаюсь придерживаться UIView сверху во время прокрутки. Пробовал использовать метод max (x: T, y: T), предложенный здесь stackOverflow, но он не работает. Мне удается обнаружить, когда scrollView должен быть переотложен, но обновление фрейма не влияет.Вид не прилипает сверху (не меняет позицию)

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 .. но не за его пределами.

+1

Если вам нужно objectView оставаться на месте, как прокручивается Scrollview , вместо того, чтобы сделать его подчиненным scrollView, почему бы не сделать их похожими друг на друга (т. е. сделать objectView подвидью вашего вида viewController вместе с scrollview)? Так я делал, когда пытался реализовать панель поиска в виде таблицы, например, вообще-то, я нахожу ее намного проще! – Sparky

+0

@Sparky - Мне нужно, чтобы objectView немного прокручивал .. от y = 270 до 0 .. но не за его пределами. – user3626615

ответ

0

Вы должны следить за исходную позицию представления в представлении прокрутки, и рассчитать, используя эту величину, здесь очень упрощенный пример:

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) 
    } 
} 
+0

Работает, когда вид создается в коде. Не в раскадровке – user3626615

Смежные вопросы