0

我的应用程序中有以下屏幕。

屏幕图像

现在定位都是硬编码的,并不漂亮。它是一个文本视图,中间有几个\ns,一个文本字段和按钮仔细定位,逐个像素地试验,然后硬编码,这很好,除非我切换到 4 英寸的屏幕,这是没用的。再加上它很丑。

我一直在寻找 stackoverflow 试图找到答案,我发现了一些关于CGPoint在特定位置创建 a 的东西UITextPosition,但不幸的是,我太新手了,无法理解答案。

有没有一种优雅的方式来软编码这些相对于彼此的位置?

谢谢你的帮助。

编辑: 这是定位代码:

    if (!optOut) {
    optOut = [[UITextView alloc] initWithFrame:CGRectMake(20, 95, [[UIScreen mainScreen] bounds].size.width - 20, 200);
    optOut.backgroundColor=[UIColor clearColor];
    optOut.text = @"\n\n\nI hope to update the Haiku app periodically with new haiku, and, if you'll allow me, I'd like permission to include your haiku in future updates.  If you're okay with my doing so, please enter your name here so I can give you credit.\n\n\n\nIf you DON'T want your haiku included \nin future updates (which would make \nme sad), check this box.";
}
[self.view addSubview:optOut];
if (!checkboxButton) {
    checkboxButton = [UIButton buttonWithType:UIButtonTypeCustom];
    checkboxButton.frame = CGRectMake(236, 260, 44, 44);
    [self.view addSubview:checkboxButton];
}
[textView resignFirstResponder];
if (!nameField)
{
    nameField=[[UITextField alloc] initWithFrame:CGRectMake(40, 223, 240, 30)];
    [self.view addSubview:nameField];
}

而不是放置optOut(20, 95, [[UIScreen mainScreen] bounds].size.width - 20, 200),我希望能够把它放在 (say) (20, [[UIScreen mainScreen] bounds].size.height/2-100, [[UIScreen mainScreen] bounds].size.width - 20, 200)。但是如果我这样做——如果optOut移动的起始位置取决于屏幕的高度——那么我也必须移动nameFieldcheckBox而且我不知道如何将它们保持在相对于optOut.

4

4 回答 4

1

所以首先,我会将 UITextView 的第二部分(在所有返回之后)放入它自己的对象中,然后将它自己附加到视图上。然后用你所拥有的最简单的方法是直接询问元素的框架放置,所以你有

checkboxButton.frame = CGRectMake(236, 260, 44, 44);

做类似的事情(如果语法有点不对,我很抱歉,但你可以理解)

checkboxButton.frame = CGRectMake([optOut center].y + pixelsToMoveOverToWhereYouLikeIt, [optOut center].y + pixelsToMoveDownToWhereYouLikeIt , 44, 44);

以此类推。这将使所有视图彼此相对或与第一个文本视图相关,具体取决于您引用的对象。

于 2013-01-06T01:24:46.210 回答
1

将其分解为可以单独定位的不同组件会容易得多,并且可以使用约束自动定位它们或在代码中单独移动它们。此外,UILabel显示静态文本会更好,因为您不需要用户能够编辑文本。像这样的东西:

在此处输入图像描述

于 2013-01-06T01:40:50.863 回答
1

基本上有两种方法可以做到这一点。首先是使用自动布局。我对自动布局没有任何经验,因为它是 iOS 6+ 的功能,但它可能值得学习。

我通常这样做的方式是这样的:

view1.frame = CGRectMake(20, 20, 200, 200);
view2.frame = CGRectOffset(view1.frame, 0, 20); // same as view1, offset down 20 points
view3.frame = CGRectMake(CGRectGetMinX(view2.frame), CGRectGetMaxY(view2.frame)+10, 80, 80);

这些CGGeometry辅助函数非常有用。还有一些晦涩难懂的CGGeometry功能不太有用,但在某些情况下可能很棒:http: //nshipster.com/cggeometry/要查看完整列表,请查看CGGeometry文档

于 2013-01-06T02:49:48.210 回答
0

文本字段在那里看起来确实很难看。你想要一个 UITextField 类型custom,并以漂亮的自风格图像作为背景。这样您就可以根据需要发布文本。对 type 的按钮执行相同操作,custom为 4 种状态(未选中、未选中-按下、选中和选中-按下)使用 4 个不同的图像。

于 2013-01-06T01:21:19.713 回答