Контент FSCalendar становится сжатым, когда я переключаю область на месяц - PullRequest
0 голосов
/ 09 декабря 2018

Содержимое моего FSCalendar сжимается, когда я переключаю его область с недели на месяц, если есть представление, ограниченное его нижним якорем.

Вот быстрый рисунок, показывающий, что именно происходит

GIF

Я уже все перепробовал.Использование calendar.setScope() вместо calendar.scope =, ограничение attachedToCalendarView.topAnchor до calendar.bottomAnchor calendar.contentView.bottomAnchor и calendar.daysContainer.bottomAnchor, даже включение и выключение ограничений attachedToCalendarView в зависимости от того, является ли это недельной областью или месяцем области действия.

Не уверен, что еще попробовать.Вот код:

import UIKit
import FSCalendar

class TestController : UIViewController, FSCalendarDataSource, FSCalendarDelegate, FSCalendarDelegateAppearance {

fileprivate weak var calendar: FSCalendar!

override func viewDidLoad() {
    super.viewDidLoad()
    view.backgroundColor = .white
    setUp()
}


@objc func switchCalendarScope(){
    if self.calendar.scope == FSCalendarScope.month {
        self.calendar.scope = FSCalendarScope.week

    } else {
        self.calendar.scope = FSCalendarScope.month
    }

}

func setUp(){

    let calendar = FSCalendar()
    calendar.dataSource = self
    calendar.delegate = self
    self.calendar = calendar

    self.calendar.scope = .week
    self.calendar.locale = Locale(identifier: "en_EN")
    self.calendar.calendarHeaderView.calendar.locale =  Locale(identifier: "en_EN")
    self.calendar.adjustsBoundingRectWhenChangingMonths = true

    let testingView = UIView()
    testingView.backgroundColor = .red

    let attachedToCalendarView = UIView()
    attachedToCalendarView.backgroundColor = .blue

    view.addSubview(calendar)
    view.addSubview(testingView)
    view.addSubview(attachedToCalendarView)

    self.calendar.translatesAutoresizingMaskIntoConstraints = false
    self.calendar.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    self.calendar.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
    self.calendar.widthAnchor.constraint(equalToConstant: view.bounds.size.width).isActive = true
    self.calendar.heightAnchor.constraint(equalToConstant: 300).isActive = true

    testingView.translatesAutoresizingMaskIntoConstraints = false
    testingView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    testingView.widthAnchor.constraint(equalToConstant: view.bounds.size.width).isActive = true
    testingView.heightAnchor.constraint(equalToConstant: 20).isActive = true

    attachedToCalendarView.translatesAutoresizingMaskIntoConstraints = false
    attachedToCalendarView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    // Attaching this view's topAnchor to the calendar's bottom anchor
    attachedToCalendarView.topAnchor.constraint(equalTo: self.calendar.contentView.bottomAnchor).isActive = true
    attachedToCalendarView.widthAnchor.constraint(equalToConstant: view.bounds.size.width).isActive = true
    attachedToCalendarView.heightAnchor.constraint(equalToConstant: 20).isActive = true


    // Title and button to toggle the calendar scope
    self.navigationItem.title = "Test"
    self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Toggle", style: .done, target: self, action: #selector(switchCalendarScope))
}

} ​​

1 Ответ

0 голосов
/ 10 декабря 2018

Ну, я не мог понять, как решить проблему сам, но я нашел обходной путь.Я поместил календарь внутри пустого представления контейнера (просто UIView) и прикрепил attachedToCalendarView к контейнеру bottomAnchor вместо самого календаря.

Обратите внимание, однако, что использование setScope, которое оживляет переход, по-прежнему вызывает ту же проблему.Чтобы это работало, вы должны установить его вручную, например calendar.scope = x

пример:

@objc func switchCalendarScope(){
    if self.calendar.scope == FSCalendarScope.month {
        // self.calendar.setScope(FSCalendarScope.week, animated: true) // this will cause the calendar to be squished again
        self.calendar.scope = .week
        movingConstraint.constant = view.safeAreaLayoutGuide.layoutFrame.size.height * -0.20
    } else {
        // self.calendar.setScope(FSCalendarScope.month, animated: true)
        self.calendar.scope = .month
        movingConstraint.constant = 0
    }
}
...