【问题标题】:Autolayout - Position by Percentage自动布局 - 按百分比定位
【发布时间】:2013-07-04 17:08:32
【问题描述】:

我想沿一条线绘制点。

线条长度取决于设备和方向,并且始终延伸到整个屏幕。因此,对我来说,使用相对百分比定位点是最有意义的。

到目前为止,我只发现在某种点值中定义了约束 (Doc)

是否也可以使用百分比值作为约束?关于如何以可扩展的方式定位这些点的任何想法......还是我需要“手动”进行这种转换/定位?

【问题讨论】:

    标签: ios objective-c uiview autolayout


    【解决方案1】:

    是的,您可以将点定位为视图宽度的一小部分。 NSLayoutConstraint 方法,constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:,有一个 multiplier 参数,可以让你在父视图和它的子视图之间使用分数关系。超级视图的右边缘将是该视图的宽度(如果它是全宽视图,则为屏幕),因此如果您创建如下所示的约束,点将定位在沿线的一小部分距离处:

    -(void)viewDidLoad {
          [super viewDidLoad];
          [self.view removeConstraint:self.leftConDark];
          [self.view removeConstraint:self.leftConLight];
          NSLayoutConstraint *lcd = [NSLayoutConstraint constraintWithItem:self.darkButton 
                                                                 attribute:NSLayoutAttributeCenterX 
                                                                 relatedBy:NSLayoutRelationEqual 
                                                                    toItem:self.view 
                                                                 attribute:NSLayoutAttributeRight 
                                                                multiplier:.5 
                                                                  constant:0];
          NSLayoutConstraint *lcl = [NSLayoutConstraint constraintWithItem:self.lightButton 
                                                                 attribute:NSLayoutAttributeCenterX 
                                                                 relatedBy:NSLayoutRelationEqual 
                                                                    toItem:self.view 
                                                                 attribute:NSLayoutAttributeRight 
                                                                multiplier:.9 
                                                                  constant:0];
          [self.view addConstraints:@[lcd,lcl]];
    }
    

    在此示例中,我定位了两个 UIButton(信息类型为深色和浅色)。我在 IB 中添加了它们,并将 IBOutlets 设置为它们在视图左侧的约束(这就是系统给我的,它可能在右侧 - 没关系,因为你只是删除它们.如果您在代码中制作点,则不需要这样做)。在代码中,我删除了这些约束,然后添加新的约束,使按钮的中心位于屏幕上 50% 和 90% 的位置。

    【讨论】:

    • +1 我同意multiplierNSLayoutAttributeRight 的使用(虽然我可能会使用NSLayoutAttributeCenterXNSLayoutAttributeRight,但Bernd 无疑明白这一点)。太棒了。
    • @Rob,感谢您的更正——我有时会忘记在帧和边界方面更新了什么内容。我原以为视图的 NSLayoutAttributeRight 在旋转时不会反映正确的值,除非代码在 viewWillLayoutSubviews 中。
    • @Rob,再次感谢 - 无需原谅,我仍在努力解决布局约束。我已经更新了答案。
    • 您不需要直接删除约束。在 IB 中,一次选择一个“占位符”约束(单击 cog-down-arrow 并选择“Select and edit...”),然后选中“remove at build time”框。
    • @Isuru,是的,您现在可以在 IB 中执行此操作(我不确定在我写此答案时是否可行)。在视图的 centerX 和父视图的尾部之间进行约束。编辑约束,并给它一个乘数,乘以您希望放置视图在屏幕上的任何部分。将常数设置为 0。
    【解决方案2】:

    我还不是自动布局专家(甚至还不是有能力的人!)但从 XCode 6 开始,您似乎可以在 IB 中做到这一点。

    1. 选择对象。
    2. 显示尺寸检查器(单击标尺)

    3. 双击约束矩形(不明显!“编辑”会将您带到其他地方)

    1. 您可以在此处设置乘数,就像上面的答案一样。

    【讨论】:

      猜你喜欢
      • 2015-07-21
      • 1970-01-01
      • 1970-01-01
      • 2011-10-18
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多