我试图找出约束方程中左右视图的值是什么.
目前这就是我的看法.
坐标系中的原点(0,0)位于左上角.
因此,靠近顶部和左侧的views.attribute更小.
在上面张贴的图片中.RedView.Leading的值高于BlueView.trailing.满足等式因为8被添加到BlueView.trailing.
这同样适用于下图中带圆圈的约束.superView.top小于greyView.top,因为superView.top在origin.x上.
我的问题是相对于原点的值?
我的安全规则设置如下(在 Firestore 控制台中)。
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read: if request.auth.uid != null && request.auth.token.email_verified;
allow write: if false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
Firebase 自动登录新用户。因此,最近的用户将拥有一个未经验证的电子邮件地址。
当用户验证他们的电子邮件时,我会在我的应用程序中得到这些结果。
Auth.auth().currentUser?.isEmailVerified // This is true
Run Code Online (Sandbox Code Playgroud)
但是当我向 firestore 发出请求时,我收到一条错误消息,指出用户没有足够的权限访问该数据。
当我注销用户然后重新登录时,一切正常。
我最初的想法是,也许有一个没有刷新的令牌?但这似乎非常令人困惑,因为在尝试向 firestore 发出请求之前,我已经刷新了当前用户。
Auth.auth().currentUser?.reload()
Run Code Online (Sandbox Code Playgroud)
我觉得我错过了一些东西。
为什么用户在注册后被强制登录,但他们的电子邮件验证状态没有相应更新?
我们是否必须请求重新认证?
如果是这样,强制登录的意义何在?
这变得非常令人沮丧,因为我不知道我应该如何管理我的用户。
登录未经验证的用户是我们应该做的事情吗?这会不会导致安全问题,例如用户创建虚假帐户和向您的应用程序发送垃圾邮件。
更新
我读到了这个不迅速的回应,这再次加强了我的怀疑。
我明天要测试这个解决方案,它的 swift 版本是:
Auth.auth().currentUser?.getIDTokenForcingRefresh(forceRefresh: , completion: )
Run Code Online (Sandbox Code Playgroud)
该方法的文档:
检索 Firebase 身份验证令牌,如果它已过期,可能会刷新它。评论
如果身份验证令牌已过期或
forceRefresh为 YES ,则会刷新(通过发出网络请求)。
我猜在我的情况下我必须强制刷新,因为令牌不会过期。
firebase firebase-security swift firebase-authentication google-cloud-firestore
我在论坛上看过有关此属性的内容,主要是人们将此属性设置为false或在故事板中取消选中它.我自己做了这个,因为当我在视图中嵌入了UINavigation Controller时,顶栏会向下推我的UITextView,所以文本在底部开始编辑.
取消选中UIViewController中StoryBoard中顶部栏下的扩展边缘可以解决我的问题,但我不明白发生了什么.
有人可以解释这个属性的目的是什么,我想了解更多.
我注意到 firebase 的奇怪行为。
在没有互联网的情况下发出登录请求时,firebase 需要很长时间才能超时并在完成处理程序中返回错误。
一旦发生第一次超时,firebase 将在 1 秒或 2 秒后开始超时。
我想降低请求的超时时间。
我知道我可以在提出任何 firebase 请求之前检查互联网连接。但这并不能解决所有情况,因为当实际发送请求时,互联网连接可能会中断。
在这些奇怪的情况下,用户将不得不等待很长时间,并且可能会认为应用程序崩溃而退出应用程序。
我知道我可以观察互联网连接并显示某种图标,让用户知道互联网连接正在中断。但这对于简单的事情来说似乎是很多工作。发生这种情况时,Apple 的网络 api 会立即返回,firebase 无法处理这样的事情似乎很奇怪。
总而言之,我想找到一种方法来降低 firebase 请求的超时时间。
或者
理想情况下,让 firebase 在互联网连接中断后立即返回错误。
我直接在视图层上画了一个圆圈,设备旋转看起来很完美。
绘图发生在func draw(_ rect: CGRect)方法中。
然后,我在子图层上绘制了圆圈,并将其添加到 init 方法中的视图中。
我在方法中更新了子层的框架func draw(_ rect: CGRect)。
在我看来,有时子层会在设备旋转完成之前进行更新。因此出现了下面的第一张图片。
使这看起来更好一点的快速修复是剪辑子视图层。这样,圆圈就不会渗入主视图(橙色视图)。
尽管这并没有解决主要问题。我不知道为什么添加子层会导致此问题。
我还在其超级视图的绘制方法中绘制子图层的内容。橙色视图不是超级视图,超级视图是中间的矩形
旋转期间
注意:我没有添加示例代码,因为我见过的所有示例都有相同的问题。其他人通过硬编码视图的大小来修复此问题,因此旋转不会调整视图的大小,并且旋转也不会导致这种情况。他们还倾向于将视图锁定在纵向模式下。
不过,如果需要示例代码,我可以创建一个简单的示例。