我不确定使用NSLayoutConstraint生成自动布局我做错了什么。
我想使用较小的外部视图宽度和高度将内部视图放在外部视图中心。最后,我想应用缩放因子。
这是我的代码。
NSLayoutConstraint.activate([
inner.centerXAnchor.constraint(equalTo: outer.centerXAnchor),
inner.centerYAnchor.constraint(equalTo: outer.centerYAnchor),
inner.widthAnchor.constraint(equalTo: outer.heightAnchor, multiplier: imageScale),
inner.widthAnchor.constraint(equalTo: outer.widthAnchor, multiplier: imageScale),
inner.heightAnchor.constraint(equalTo: inner.widthAnchor)
])
这适用于:
但是当宽度>身高我明白了:
我错过了什么?这很容易使用框架:
let innerWidth = min(outer.frame.width, outer.frame.height) * imageScale
let innerHeight = innerWidth
inner.frame = CGRect(x: (outer.frame.width -innerWidth) / 2,
y: (outer.frame.height - innerHeight) / 2,
width: innerWidth, height: innerHeight)
答案 0 :(得分:2)
首先,您在代码中设置@model IEnumerable<Laier_It.Models.Company>
@using (Html.BeginForm() )
{
<p>
Search By: @Html.DropDownList("SearchCategory", "")
Search For: @Html.TextBox("SearchString")
<input type="submit" value="Filter" />
</p>
}
<table class="table ">
<thead>
<tr>
<th>
@Html.ActionLink("Name", "Index", new { orderBy = ViewBag.sortByName, prev = @Model.Select(x => x.Id) } )
</th>
<th>
@Html.DisplayNameFor(model => model.Address)
</th>
<th>
@Html.ActionLink("City", "Index", new { orderBy = ViewBag.sortByCity, prev = @Model.Select(x => x.Id) } )
</th>
<th>
@Html.ActionLink("State", "Index", new { orderBy = ViewBag.sortByState, prev = @Model.Select(x => x.Id) } )
</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Address)
</td>
<td>
@Html.DisplayFor(modelItem => item.City)
</td>
<td>
@Html.DisplayFor(modelItem => item.State)
</td>
</tr>
}
</tbody>
</table>
约束两次有点奇怪。只设置一次。
此外,您需要根据实际的外部视图框架为内部视图的尺寸选择外部锚点。如果最小外部尺寸是宽度,则将内部视图的宽度约束为inner.widthAnchor
。否则,当最小外部尺寸为高度时,您约束为outer.widthAnchor * imageScale
。
这有助于我获得您正在寻找的布局(我刚刚创建了一个简单的单视图项目):
outer.heightAnchor * imageScale