【问题标题】:UIView coordinates when using autloyout使用自动布局时的 UIView 坐标
【发布时间】:2014-10-24 08:47:15
【问题描述】:

我需要在 UITextField 下方画一条线。我通过创建高度为 1 的 UIView 使用最简单的方法。问题是 UITextField 使用自动布局定位在 IB 中,并且在调用 -viewDidLoad 时似乎它的框架未确定。以前我使用这种画线的方式,所有视图都使用代码进行布局。在这种情况下,如何确定我的 UITextField 的坐标?

我用这段代码来创建一行

- (void)drawLineBelowTextFied:(UITextField *)textField {

#define LINE_MARGIN 20

//draw a line

UIView *line = [[UIView alloc] initWithFrame:CGRectMake(LINE_MARGIN, textField.frame.origin.y + textField.frame.size.height, self.view.bounds.size.width-LINE_MARGIN*2, 1)];
line.backgroundColor = [UIColor grayColor];
line.alpha = 0.25f;
line.clipsToBounds = NO;
[_loginView insertSubview:line belowSubview:textField];

线无处出现。如果我用常数替换 y 坐标,它就会出现。

【问题讨论】:

  • 在 viewDidLoad() 或 viewDidAppear() 内执行 drawLineBelowTextField 之后?在 viewDidLoad 中,视图的框架可能尚未初始化,也可能尚未初始化。

标签: ios objective-c uiview autolayout frame


【解决方案1】:

您不应该在代码中混合使用自动布局和设置框架。如果需要,您应该创建一个约束(从编辑器或在代码中)指定这两个组件之间的距离和大小。

【讨论】:

  • 谢谢,我会努力的。现在我明白了我错在哪里以及为什么。
【解决方案2】:

正如 Apple 的文档中所指出的,在 NSLayoutConstraints 应用到 之后,带有 AutolayoutUIView 将具有预期的位置和大小>layoutSubviews 方法。在 UIViewController 级别,您会在 viewDidLayoutSubviews 中收到通知。重要的是要记住,viewDidLayoutSubviews 中的代码会在每次视图边界发生变化时执行。

【讨论】:

    猜你喜欢
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    相关资源
    最近更新 更多