我正在开发一款可以在中午向您发送通知的应用程序。这个通知应该每天都不同。
我得到了通知本身的工作:
let notificationOptions: UNAuthorizationOptions = [.alert, .sound];
UNUserNotificationCenter.current().requestAuthorization(options: notificationOptions) { (granted, error) in
if !granted {
print("Something went wrong")
} else {
let content = UNMutableNotificationContent()
content.body = getRandomDailyString()
content.sound = UNNotificationSound.default()
let date = DateComponents(hour: 12, minute: 15)
let trigger = UNCalendarNotificationTrigger(dateMatching: date, repeats: true)
let request = UNNotificationRequest(identifier: "Daily String", content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request) { (error) in
if let error = error {
print(error.localizedDescription)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在发生的情况是调用getRandomDailyString()函数,它返回一个字符串,并设置一个重复通知,该通知确实出现在指定时间,但始终具有相同的内容。
我该如何制作每天提供独特内容的通知?
我正在开发一个 Flutter 应用程序,需要在小屏幕(iPhone 5S、SE、6S、Galaxy 5S 等)上调整元素大小。
为了做到这一点,我调用double width = MediaQuery.of(context).size.width,如果该值低于750像素(iPhone 6S 大小),则元素会变小。
这在设备上效果很好,但在 iOS 模拟器中,无论它在哪个模拟设备上运行,该值总是很小(~375)。这基本上使得查看应用程序是否在模拟器上运行之后无法使用,因为它总是显示“小”版本。
有没有更好的方法来获取适用于 iOS 模拟器的设备大小?或者可能有其他方法来适应屏幕尺寸?
我在 flutter 上运行这个,但我想这可能是一个更普遍的问题。
我正在首选项中保存日期时间。我希望能够判断是否DateTime.now()在上次保存的日期时间后至少一天,即
(pseudocode)
lastDailyCheck = 2020.04.10
now = 2020.04.11
Run Code Online (Sandbox Code Playgroud)
=> 现在是上次每日检查后的一天。
如果新的一天是 00:01,即使最后一次每日检查是在前一天的 23:58,这也应该已经起作用,这意味着 2 个日期时间之间的差异可以低至分钟。
事实证明这真的很复杂!
DateTime.Now().isAfter(lastDailyCheck)
这只检查现在是否在最后一个之后,它也会在一秒钟后和同一天返回 true。
DateTime.Now().isAfter(lastDailyCheck) && lastDailyCheck.day != DateTime.Now().day
我认为这很聪明。如果这一天不同并且是在最后一天之后,那么它确实可以识别出这是一天之后的事情 - 但后来我意识到当这两天都在该月的 15 日时,它会出错 - 那么lastDailyCheck.day就会相等DateTime.Now().day。
您认为这里可能会发生什么?
我正在开发的应用程序基于 TabBar,当我在选项卡上时,我希望能够再次单击 tabItem 以重置视图,类似于 twitter 在他们的 tabBar 中执行此操作的方式。
我不知道如何识别那个动作。向 TabItem 添加按钮不起作用,添加 tapGesture 修饰符也不起作用,我想不出还有什么可以尝试的。
struct ContentView: View {
var body: some View {
TabView() {
Text("Tab 1")
.tabItem {
Image(systemName: "star")
.onTapGesture {
print("Hello!")
}
Text("One")
}
.tag(0)
Text("Tab 2")
.tabItem {
Button(action: {
print("Hello!")
}, label: {
Image(systemName: "star.fill")
})
}
.tag(1)
}
}
}
Run Code Online (Sandbox Code Playgroud)
再次打开选项卡时,它不应该自动重置,我在别处看到过这一点,但是再次点击 tabItem 时。
我在这里可能还缺少哪些其他东西?