Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin iOS:使用LayoutConstraint(可视格式)对齐TableView中的字段_Ios_Uitableview_Xamarin_Nslayoutconstraint - Fatal编程技术网

Xamarin iOS:使用LayoutConstraint(可视格式)对齐TableView中的字段

Xamarin iOS:使用LayoutConstraint(可视格式)对齐TableView中的字段,ios,uitableview,xamarin,nslayoutconstraint,Ios,Uitableview,Xamarin,Nslayoutconstraint,我希望将表格单元格中的视图对齐,使所有垃圾箱位于左侧,文本字段位于右侧(具有固定宽度),说明填充两者之间的空间。顶部的描述如果太长,将分成两行 我正在尝试使用视觉格式的布局约束,但我不确定这是否是正确的方法 var views = new UIView[] { btnRemove, lblDescription, txtQuantity }; var stkRoot = IOSUtils.CreateStackView(views, UILayoutConstraintAxis.Horizon

我希望将表格单元格中的视图对齐,使所有垃圾箱位于左侧,文本字段位于右侧(具有固定宽度),说明填充两者之间的空间。顶部的描述如果太长,将分成两行

我正在尝试使用视觉格式的布局约束,但我不确定这是否是正确的方法

var views = new UIView[] { btnRemove, lblDescription, txtQuantity };
var stkRoot = IOSUtils.CreateStackView(views, UILayoutConstraintAxis.Horizontal);
this.AddSubview(stkRoot);

var viewMetrics = new Object[] {
    "stack", stkRoot,
    "remove", btnRemove,
    "label", lblDescription,
    "field", txtQuantity,
    "margin", 8
};

List<NSLayoutConstraint> constraints = new List<NSLayoutConstraint>();
constraints.AddRange(
    NSLayoutConstraint.FromVisualFormat(
        "V:|-margin-[stack]-margin-|",
        NSLayoutFormatOptions.AlignAllLeading,
        viewMetrics
    )
);
constraints.AddRange(
    NSLayoutConstraint.FromVisualFormat(
        "H:|-margin-[remove]-margin-[label(>=70)]-margin-[field(60@20)]-margin-|",
        NSLayoutFormatOptions.DirectionLeftToRight | NSLayoutFormatOptions.AlignAllCenterY,
        viewMetrics
    )
);

AddConstraints(constraints.ToArray());
var views=newuiview[]{btnRemove,lblDescription,txtQuantity};
var stkRoot=IOSUtils.CreateStackView(视图,UILayoutConstraintAxis.Horizontal);
这个.AddSubview(stkRoot);
var viewMetrics=新对象[]{
“stack”,stkRoot,
“移除”,BTN移除,
“标签”,LBL说明,
“字段”,TXT数量,
“保证金”,8
};
列表约束=新列表();
约束。添加范围(
NSLayoutConstraint.FromVisualFormat(
“V:|-边距-[堆栈]-边距-|”,
NSLayoutFormatOptions.AlignAllLeading,
viewMetrics
)
);
约束。添加范围(
NSLayoutConstraint.FromVisualFormat(
“H:|-页边距-[删除]-页边距-[标签(>=70)]-页边距-[字段(60@20)]-边距-|“,
NSLayoutFormatOptions.DirectionLeftToRight | NSLayoutFormatOptions.AlignAllCenterY,
viewMetrics
)
);
添加约束(constraints.ToArray());
btnRemove和txtQuantity是一个UIButton和一个UIExtField,具有很高的压缩和压缩阻力,lblDescription是一个UILabel,具有很低的压缩和压缩阻力。我仍然需要设置边距、颜色等。。。
有人能给我一些提示吗?

我没有使用视觉格式。这也将完成工作

ContentView.AddSubviews (btnRemove, lblDescription, txtQuantity);

btnRemove.TranslatesAutoresizingMaskIntoConstraints = false;
lblDescription.TranslatesAutoresizingMaskIntoConstraints = false;
txtQuantity.TranslatesAutoresizingMaskIntoConstraints = false;

// add leading space to btnRemove
var btnRemoveLeading = NSLayoutConstraint.Create (btnRemove, NSLayoutAttribute.Leading,
                                  NSLayoutRelation.Equal, ContentView, NSLayoutAttribute.Leading, 1, 8);
ContentView.AddConstraint (btnRemoveLeading);

// add center-y contraint to btnRemove
var btnRemoveCenterY = NSLayoutConstraint.Create (btnRemove, NSLayoutAttribute.CenterY,
                                  NSLayoutRelation.Equal, ContentView, NSLayoutAttribute.CenterY, 1, 0);
ContentView.AddConstraint (btnRemoveCenterY);

// add trailing space to txtQuantity
var txtQuantityTrailing = NSLayoutConstraint.Create (txtQuantity, NSLayoutAttribute.Trailing,
                                     NSLayoutRelation.Equal, ContentView, NSLayoutAttribute.Trailing, 1, -8);
ContentView.AddConstraint (txtQuantityTrailing);

// add center-y contraint to txtQuantity
var txtQuantityCenterY = NSLayoutConstraint.Create (txtQuantity, NSLayoutAttribute.CenterY, NSLayoutRelation.Equal, ContentView, NSLayoutAttribute.CenterY, 1, 0);
ContentView.AddConstraint (txtQuantityCenterY);

// add horizontal space between btnRemove and lblDescription
var hsBtnRemoveTolblDescription = NSLayoutConstraint.Create (btnRemove, NSLayoutAttribute.Right,
                                         NSLayoutRelation.Equal, lblDescription, NSLayoutAttribute.Left, 1, 8);
ContentView.AddConstraint (hsBtnRemoveTolblDescription);

// add horizontal space between txtQuantity and lblDescription
var hstxtQuantityTolblDescription = NSLayoutConstraint.Create (txtQuantity, NSLayoutAttribute.Left,
                                           NSLayoutRelation.Equal, lblDescription, NSLayoutAttribute.Right, 1, 8);
ContentView.AddConstraint (hsBtnRemoveTolblDescription);

// add center-y contraint to lblDescription
var lblDescriptionCenterY = NSLayoutConstraint.Create (btnRemove, NSLayoutAttribute.CenterY,
                                  NSLayoutRelation.Equal, ContentView, NSLayoutAttribute.CenterY, 1, 0);
ContentView.AddConstraint (lblDescriptionCenterY);
编辑:还向按钮和文本字段添加宽度约束,以便标签拉伸

var btnRemoveWidth = NSLayoutConstraint.Create (btnRemove, NSLayoutAttribute.Width,
                                  NSLayoutRelation.Equal, null, NSLayoutAttribute.NoAttribute, 1, 32);
ContentView.AddConstraint (btnRemoveWidth);

var txtQuantityWidth = NSLayoutConstraint.Create (txtQuantity, NSLayoutAttribute.Width,
                                  NSLayoutRelation.Equal, null, NSLayoutAttribute.NoAttribute, 1, 40);
ContentView.AddConstraint (txtQuantityWidth);
要使标签多行,并使UITableviewCell根据标签的行数增长,请向标签添加顶部和底部约束,并将高度设置为大于某个值:

var vSlblDescriptionToTop = NSLayoutConstraint.Create (lblDescription, NSLayoutAttribute.Top, NSLayoutRelation.Equal, ContentView, NSLayoutAttribute.Top, 1, 8);
ContentView.AddConstraint (vSlblDescriptionToTop);

var vSlblDescriptionBottom = NSLayoutConstraint.Create (lblDescription, NSLayoutAttribute.Bottom, NSLayoutRelation.Equal, ContentView, NSLayoutAttribute.Bottom, 1, -8);
ContentView.AddConstraint (vSlblDescriptionBottom);

var lblDescriptionHeight = NSLayoutConstraint.Create (lblDescription, NSLayoutAttribute.Height,
                                                                  NSLayoutRelation.GreaterThanOrEqual, null, NSLayoutAttribute.NoAttribute, 1, 32);
ContentView.AddConstraint (lblDescriptionHeight);
并将tableview的行高设置为AutomaticDimension

myTableView.EstimatedRowHeight = 44;
myTableView.RowHeight = UITableView.AutomaticDimension;
myTableView.Source = ....
public override nfloat GetHeightForRow (UITableView tableView, NSIndexPath indexPath)
{
    return UITableView.AutomaticDimension;
}
还重写UITableViewSource的GetHeightForRow以返回自动标注

myTableView.EstimatedRowHeight = 44;
myTableView.RowHeight = UITableView.AutomaticDimension;
myTableView.Source = ....
public override nfloat GetHeightForRow (UITableView tableView, NSIndexPath indexPath)
{
    return UITableView.AutomaticDimension;
}

为什么要将项目添加到stackview,然后添加约束?这里不需要StackView。只需添加约束Hank you@HeisenBerg,假设我刚开始在ios中创建ui,有时我会遵循一些我在教程中读到的过于严格的建议,其中他们说首先尝试始终使用StackView:)我猜在我得到左边的图标后,我必须得到右边的文本字段,为了固定标签的侧边,我会用钛做这个。谢谢,谢谢,海森堡,我过两个小时就去试试,效果很好,太好了。var
lblDescriptionCenterY=NSLayoutConstraint.Create(btnRemove
(btnRemove而不是lblubiczione)上只有一个打字错误