0

下部のアンカーに制限されているビューがある場合、スコープを週から月に切り替えると、FSCalendar のコンテンツが縮小します。

これは、正確に何が起こっているかを示す簡単な gif です。

GIF

この時点ですべてを試しました。calendar.setScope()の代わりに を使用し、 calendar.scope =、 に制約attachedToCalendarView.topAnchorcalendar.bottomAnchor calendar.contentView.bottomAnchor、スコープが週であるか月であるかに応じて、 の制約をオンまたはオフにしますcalendar.daysContainer.bottomAnchorattachedToCalendarView

他に何を試すべきかわからない。コードは次のとおりです。

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

}

4

1 に答える 1

0

問題自体を修正する方法はわかりませんでしたが、回避策を見つけました。空のコンテナー ビュー (単純な 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
    }
}
于 2018-12-10T13:09:19.667 に答える