全宽视图不包含与父级相同的帧宽

时间:2016-01-08 13:38:57

标签: ios

我遇到一个问题,我有UIImageView使用以下约束跨越整个屏幕宽度。

  • 对齐导致:Superview(等于:-20)
  • 将跟踪对齐:Superview(等于:-20)
  • 顶部空间:顶部布局指南(等于:0)
  • 纵横比:1:1

图像采用屏幕宽度,同时获得纵横比(在本例中为正方形)。问题出现在我开始尝试从图像中创建一个圆圈时,我注意到我的UIIMageView的帧没有正确的值。

由于我通过RoboVM使用Java,你不得不在下面编写代码,因为我正在通过RoboVM使用Java,但只需很少的努力就可以将代码精神上转换为Objective-C,因为它非常简单。

public class MyViewController extends UIViewController {
    @IBOutlet private UIImageView myImageView;

    @Override public void viewDidLoad() {
        System.out.println("Image view width: " + myImageView.getFrame().getWidth());
        System.out.println("Superview width: " + this.getView().getFrame().getWidth());
    }
}

使用此Controller运行应用程序的结果显示以下内容:

Image view width: 240.0
Superview width: 320.0

当将图像的帧宽减半并将其应用于CALayer#cornerRadius属性时,图像不会形成完整的圆,但是当使用一半的超视图宽度时(实际上是大小的image)结果是一个完美的圆圈。

2 个答案:

答案 0 :(得分:2)

session = new SessionManager(getApplicationContext()); 中,它刚刚从XIB或故事板加载了您的视图,但尚未调整大小。调用viewDidLoad时,大小应该正确。因此,请尝试将代码放在viewWillAppear中,看看是否有帮助。

答案 1 :(得分:0)

您需要-20保证金的原因是因为您的超级视图的边距为20,并且默认情况下约束创建为“相对于保证金” - 如果取消选中,则可以设置“实际”约束 - 这种情况为零而不是-20

如果在助理编辑器中选择约束,您将看到用于切换此值的复选框