使用autolayout将屏幕分为1/3和2/3视图

时间:2015-07-07 06:45:02

标签: ios swift ios-autolayout

有没有办法按百分比划分屏幕(不等于百分比) 我需要将屏幕分成两部分1/3和2/3。 我知道如何分成相等的部分,但无法弄清楚如何分裂为不相等。

由于

4 个答案:

答案 0 :(得分:55)

Xcode contraints

制作一个"相等的宽度"视图与超级视图之间的约束,一个视图的乘数为2:3,另一个视图为1:3。见图。 "等高"如果你想分开另一个方向。

答案 1 :(得分:24)

步骤:

  1. var tabled = document.getElementById("table_data"); var newRowContent = '<tr><td></td><td><input type="text" name="date" id="date" class="numbersOnly" onchange="vdateRange()" placeholder=""/></td><td><input type="text" name="reading1" class="numbersOnly" onkeypress="validate(event)" /></td><td><input type="text" name="reading2" class="numbersOnly" onkeypress="validate(event)" /></td><td><input type="text" name="reading3" class="numbersOnly" onkeypress="validate(event)" /></td><td><input type="text" name="remark"/></td></tr>'; //<button type="button" name="delete_row" class="glyphicon glyphicon-remove-sign" onclick="deleteRow(this)"></button> #delete button //rows = table.insertRow(z); if (tabled.rows.length > 0) { $("#table_data tbody tr").remove(); for(i = 0; i < z+1; i++){ $('#table_data > tbody').append(newRowContent); } 上拖动两个UIView objects
  2. 将左侧视图固定到viewcontroller
  3. 的左侧,顶部和底部
  4. 右视图,superview的右上角,顶部和底部。
  5. 固定两个视图(左侧和右侧)之间的水平间距。确保常数为零,因为/如果你不想要间距。
  6. 选择左视图和超级视图并均匀设置宽度(请耐心等待)。现在转到尺寸检查器并编辑宽度相等约束,选择左视图。现在将乘数设置为0.33(现在设置%宽度)。
  7. enter image description here

    查看结果:

    enter image description here

答案 2 :(得分:14)

使用storyboard&amp;自动布局非常简单:我想你需要垂直分割屏幕(但水平方向是同样的技巧)。

因此,使用单个视图控制器,拖放两个视图并将它们设置为顶部和底部。对于视图1

查看2

现在您需要为主视图中的视图1设置约束相等高度,并为视图2设置相同。之后,您可以编辑这些约束设置的值(0到1之间) )作为乘数。双击约束:

并设置你想要的比例值(它将这些约束的总和保持为1或者只是在这里放入“2:3”和在另一个视图中放入“1:3”):

所以这就是结果:

我希望这是你需要的,告诉我你是否需要更多细节!

答案 3 :(得分:1)

您可以在接受的答案中使用Equal Widths约束,但是,如果您尝试约束的不是两个尺寸,而是一个指向另一个,例如约束一个视图的horizontal center到屏幕上的1/3或2/3点,然后它将无法工作,因为你无法将空间中的一个点约束到一个大小。

但如果您知道,view1xib中的horizontal center将是屏幕的整个宽度,那么,例如trailing点,您可以约束它到该视图的1:3边缘,如果您希望视图以屏幕宽度的1/3或2/3为中心,则将乘数分别设置为2:3public class MyServiceLogHandler implements SOAPHandler<SOAPMessageContext> { Logger handlerLog = LogManager.getLogger(MyServiceLogHandler.class); public boolean handleMessage(SOAPMessageContext context) { SOAPMessage message= context.getMessage(); boolean isOutboundMessage= (Boolean)context.get (MessageContext.MESSAGE_OUTBOUND_PROPERTY); if(isOutboundMessage){ handlerLog.debug("OUTBOUND MESSAGE\n"); }else{ handlerLog.debug("INBOUND MESSAGE\n"); } try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); message.writeTo(baos); handlerLog.debug(" " + baos.toString()); baos.close(); return true; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return false; } public boolean handleFault(SOAPMessageContext context) { SOAPMessage message= context.getMessage(); try { message.writeTo(System.out); } catch (SOAPException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return false; } public void close(MessageContext context) { // TODO Auto-generated method stub } public Set<QName> getHeaders() { // TODO Auto-generated method stub return null; } } 。 / p>