Вот решение с jQuery, которое работает как шарм. Он проверяет, больше ли высота окна больше высоты тела. Если это так, то он меняет верхний край нижнего колонтитула для компенсации. Тестирование в Firefox, Chrome, Safari и Opera.
$( function () {
var height_diff = $( window ).height() - $( 'body' ).height();
if ( height_diff > 0 ) {
$( '#footer' ).css( 'margin-top', height_diff );
}
});
Если ваш нижний колонтитул уже имеет верхний край (например, 50 пикселей), вам нужно будет изменить последнюю часть для:
css( 'margin-top', height_diff + 50 )
Я пытался сделать это в Objective-C, и он работает, но мне нужно использовать его в Swift, и когда я запускаю программу, она анимируется, но в конце возвращается к предыдущему цвету, мне это нужно так оставаться синим.
Вам нужно всего лишь:
animation.removedOnCompletion = false // not true like in your code
Для тех, кто в комментариях спрашивает о бесконечной анимации, вот мой базовый пример кода для бесконечно анимированного фона: -
Полное обсуждение и результаты можно увидеть в моем блоге
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// create the gradient layer
let gradient = CAGradientLayer()
gradient.frame = self.view.bounds
gradient.startPoint = CGPoint(x:0.0, y:0.5)
gradient.endPoint = CGPoint(x:1.0, y:0.5)
gradient.colors = [UIColor.red.cgColor, UIColor.green.cgColor]
gradient.locations = [-0.5, 1.5]
let animation = CABasicAnimation(keyPath: "colors")
animation.fromValue = [UIColor.red.cgColor, UIColor.green.cgColor]
animation.toValue = [UIColor.green.cgColor, UIColor.red.cgColor]
animation.duration = 5.0
animation.autoreverses = true
animation.repeatCount = Float.infinity
// add the animation to the gradient
gradient.add(animation, forKey: nil)
// add the gradient to the view
self.view.layer.addSublayer(gradient)
}
}
Для дальнейшего использования ... 100% загрузка ЦП вызвана функцией animationDidStop. Он перезапускает анимацию, пока текущая анимация не закончена. Пожалуйста, проверьте готовый флаг:
override func animationDidStop(anim: CAAnimation, finished: Bool) {
if finished {
self.toColors = self.fromColors;
self.fromColors = self.gradient?.colors
animateLayer()
}
}