为啥当我将我的 UILabel 移动到某个点时,当我进入全屏模式时它会被移动?

Posted

技术标签:

【中文标题】为啥当我将我的 UILabel 移动到某个点时,当我进入全屏模式时它会被移动?【英文标题】:Why when I move my UILabel to a certain point, does it get moved when I enter full screen mode?为什么当我将我的 UILabel 移动到某个点时,当我进入全屏模式时它会被移动? 【发布时间】:2013-11-09 23:32:37 【问题描述】:

这里的示例项目:http://cl.ly/1n211V1e433G

我正在构建一个应用程序,您可以在其中使用UIPanGestureRecognizer 在中间向上或向下滑动标签,该NSLayoutConstraint 调整常量以了解文本与底部的距离。

- (IBAction)labelPanned:(UIPanGestureRecognizer *)sender 
    CGPoint p = [sender locationInView:self.view];
    p.y -= sender.view.frame.size.height / 2.0;

    self.labelDistanceFromBottomConstraint.constant = -p.y + [UIScreen mainScreen].bounds.size.height - 250 + self.textToReadLabel.frame.size.height;

我认为该约束的优先级低于两个约束,即它必须从顶部或底部开始大于或等于 50。基本上是更强的约束,确保它不会太高或太低。

当用户进入全屏模式时,文本标签应保持在原位而不移动。如示例项目所示,它的效果很好,除非标签被移到顶部,当进入全屏模式时,它会向上滑动。

这是为什么?我怎样才能阻止这种行为?

【问题讨论】:

【参考方案1】:

这是因为,您已将 UILabel 约束设置为从顶部调整大小,这导致 UILabel 在您执行全屏时视图框架发生变化时从顶部调整,所以 Remove the Top constraint 而您可以尝试例如,停止平移到某些y position

- (IBAction)labelPanned:(UIPanGestureRecognizer *)sender 
       CGPoint p = [sender locationInView:self.view];
       if(p.y<150.0)return;

编辑

重点是你不应该为标签设置从顶部调整的约束,所以移除顶部约束当你进入全屏时它不会自动调整。

【讨论】:

更不用说在项目中如果你输入p.y &lt; -100,例如同样的结果。 @DougSmith 我认为你错过了一点Remove Top Constraint,如果你删除约束并停止标签超出,我提出的值只是这样做的例子。但如果你删除顶部约束,标签不会在全屏上向上移动..你试过了吗..?

以上是关于为啥当我将我的 UILabel 移动到某个点时,当我进入全屏模式时它会被移动?的主要内容,如果未能解决你的问题,请参考以下文章

当我将我的 laravel 项目放入 xampp 时,我的登录不起作用

为啥当我将 Meteor 应用程序转换为使用 Docker 时,我的 MongoDB 数据会消失?

为啥当我将帖子发送到我的服务器时字符串更改为 %

为啥当我切换工作区时 Flash Builder Premium 会作为标准版启动?

UILabel 垂直对齐缺少的空间

为啥当我将查询字符串添加到我的 url 时,它会被 xampp 拒绝(“在此服务器上找不到请求的 URL”)