2015-04-17 2 views
0

Я пытаюсь анимировать UITableView так, чтобы при появлении этого вида он переместился снизу вверх. Я пробовал использовать множество разных методов из разных вопросов здесь, но никаких предложений для меня не работало.Перемещение позиции UITableView в Swift

То, что я на данный момент это:

override func viewDidLoad() { 
    super.viewDidLoad() 

    menuTableView.layer.cornerRadius = 7 

    menuTableView.delegate = self 
    menuTableView.dataSource = self 
    view.addSubview(menuTableView) 

    menuTableView.frame.origin.y = menuTableView.frame.origin.y + menuTableView.frame.height 
    // Do any additional setup after loading the view. 
} 

override func viewDidAppear(animated: Bool) { 
    if (menuTableView.indexPathForSelectedRow() != nil) { 
     menuTableView.deselectRowAtIndexPath(menuTableView.indexPathForSelectedRow()!, animated: true) 
    } 

    UIView.animateWithDuration(10, animations: { 
     self.menuTableView.frame.origin.y - menuTableView.frame.height 
    }) 
} 

Кто-то предложил добавить UITableView как подвид, поэтому я попытался это, но он также не работает. Стол остается там, где он есть.

Кто-нибудь знает способ, который работает в Swift?

+0

Is табличное сделано в раскадровке, и является автоматическая раскладка включена (это если вы не выключили его)? – rdelmar

+0

Это, да. И я отключил автоматическую компоновку. С первым предложением нижеприведенного ответа он работает, но, похоже, второй второй оставшийся (я предполагаю, потому что добавляю второе представление таблицы как подвью?). – user3746428

+0

Вместо того, чтобы отключать его, научитесь использовать автоматическую компоновку. С его помощью вы должны сделать IBOutlet для ограничения, которое вы хотите изменить, и изменить его постоянное значение в коде для анимации. – rdelmar

ответ

3

Вы можете попытаться изменить содержимое таблицыInset вместо изменения рамки.

override func viewDidLoad() { 
    super.viewDidLoad() 

    menuTableView.layer.cornerRadius = 7 

    menuTableView.delegate = self 
    menuTableView.dataSource = self 
    view.addSubview(menuTableView) 

    menuTableView.contentInset = UIEdgeInsets(top: self.view.bounds.height, left: 0, bottom: 0, right: 0) 
} 

override func viewDidAppear(animated: Bool) { 
    if (menuTableView.indexPathForSelectedRow() != nil) { 
     menuTableView.deselectRowAtIndexPath(menuTableView.indexPathForSelectedRow()!, animated: true) 
    } 

    UIView.animateWithDuration(10, animations: { 
     self.menuTableView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0) 
    }) 
} 

Таким образом, вид стола всегда остается сверху, только верхний край ячеек таблицы перемещается снизу вверх.

================================================================================================================================== ==========================

Редактировать

Я изменил код немного, чтобы сделать шаг фонового изображения вместе.

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 

    var frame = self.menuTableView.frame 
    frame.origin.y += menuTableView.frame.height 
    self.menuTableView.frame = frame 
} 

override func viewDidAppear(animated: Bool) { 
    if (menuTableView.indexPathForSelectedRow() != nil) { 
     menuTableView.deselectRowAtIndexPath(menuTableView.indexPathForSelectedRow()!, animated: true) 
    } 

    UIView.animateWithDuration(10, animations: { 
     var frame = self.menuTableView.frame 
     frame.origin.y -= self.menuTableView.frame.height 
     self.menuTableView.frame = frame 
    }) 
} 

1: Поместите свой исходный код кадра в viewDidLayoutSubviews, если хотите изменить рамку после применения всех ограничений.

2: Чтобы иметь возможность изменять фрейм, вам нужно вызвать установщик атрибутов фрейма.

someView.frame = someFrame 

Сообщите мне, если возникнут дополнительные проблемы.

Редактировать

Github ссылка на рабочую демо: https://github.com/liusally/SlideUpMenuTableView

+0

Спасибо за ответ. Кажется, что все ячейки сдвинуты и оживляют их, но не перемещают фон таблицы. – user3746428

+0

@ user3746428 попробуйте отредактированный ответ –

+0

Редактирование не помогло, к сожалению. Кажется, что стол застрял в нижней части окна. Я нашел обходное решение для первого предложения, и это не идеально, но он работает достаточно хорошо. Благодаря! – user3746428

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