- bounty将在3天后过期**。回答此问题可获得+50声望奖励。Damian Kociszewski希望引起更多人对此问题的关注:我需要你帮我把它修好
我在列表视图中显示UICalendarView时遇到了困难。无论我做什么,日历总是呈现在节边界之外(如下面的屏幕截图所示,最后一周被截断)。理想情况下,我希望日历呈现在节视图中,具有完全可用的宽度和高度,可以自行调整以适应所有内容。
下面是我的列表视图代码:
List {
Section(header: Text("text")) {
MyCalendarView()
.scaledToFill() // .scaledToFit()
.frame(maxWidth: .infinity, maxHeight: .infinity)
// .frame(width: 200)
// .frame(height: 400)
}
}
下面是我的uikit日历视图代码:
let calendarView = UICalendarView()
calendarView.translatesAutoresizingMaskIntoConstraints = false
calendarView.calendar = Calendar(identifier: .iso8601)
calendarView.tintColor = UIColor.tintColor
view.addSubview(calendarView)
NSLayoutConstraint.activate([
calendarView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0),
calendarView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 0),
calendarView.topAnchor.constraint(equalTo: view.topAnchor, constant: 0),
calendarView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0)
])
我使用的UIViewRepresentable如下所示:
struct MyCalendarView: UIViewControllerRepresentable {
typealias UIViewControllerType = MyCalendarViewController
func makeUIViewController(context: Context) -> MyCalendarViewController {
let viewController = MyViewController()
return viewController
}
func updateUIViewController(_ uiViewController: MyViewController, context: Context) {}
}
此外,我收到以下警告:
[UICalendarView] UICalendarView's height is smaller than it can render its content in; defaulting to the minimum height.
1条答案
按热度按时间enxuqcxy1#
你的思路是正确的!UICalendarView有一个与其内容相关的固有大小。你可以了解更多关于here的概念。
要解决这个问题,你需要做的就是使用SwiftUI的
fixedSize
修饰符。下面的代码是在Swift Playgrounds中测试的。上面你可以看到我已经简化了你的
UIViewRepresentable
来包含你的日历视图的所有信息,你不需要NSLayoutConstraints
或者translatesAutoresizingMaskIntoConstraints
来达到你想要的效果。在上面的例子中,你的日历将被包含在节中,并且与它的内容垂直。这是因为
fixedSize
修饰符引用了UIViewRepresentable的 * 内在内容大小 *。水平固定大小将导致日历不在节中居中,所以我将该值设置为false。我提供了输出的屏幕截图: