在我的xamarin iOS应用程序中,我有一个列表视图,我想在加载时显示加载图标。但是,我不想禁用整个页面。我希望用户仍然可以使用返回导航返回。
我使用this作为参考。
所以,我试图设置CGRect框架,让导航顶部处于活动状态,并在加载状态期间禁用页面的其余部分。
我正在使用这样的东西:new CGRect(30, 0,0, 0)
从顶部留下30个单位,但它不起作用。任何人都可以帮我一个框架,只留下导航栏并覆盖页面的其余部分吗?
答案 0 :(得分:1)
您必须将叠加层添加到表格视图中,这会导致出现居中问题。为此,有一些选项:滚动时重新计算叠加层的位置,在表格视图后面添加一个额外的图层,您可以使用autolayout进行定位,...
我正在使用自动布局,你应该避免给出实际数字,但也可以使用边界。还要注意用户是否导航,你必须取消任务!
答案 1 :(得分:1)
AutoLayout是一种比使用框架更好的完成此任务的方法。除非您需要定位真正的旧版iOS,否则AutoLayout通常就是您的选择。
我假设您使用的是UIViewController
而不是UITableViewController
。这是一个重要的区别,因为UITableViewController
只允许您添加UITableView
,这使得此任务更具挑战性。
将此AddAnOverlay
方法添加到UIViewController
课程,然后在想要显示叠加层时调用它。您可能需要将overlay
放在实例变量中,以便以后可以将其删除。通过致电overlay.RemoveFromSuperview()
将其删除即可。
void AddAnOverlay()
{
var overlay = new UIView();
overlay.BackgroundColor = UIColor.Black.ColorWithAlpha(0.45f); // or whatever colo
overlay.TranslatesAutoresizingMaskIntoConstraints = false;
var label = new UILabel();
label.TranslatesAutoresizingMaskIntoConstraints = false;
label.Text = "Loading Fantastic Things!";
var spinner = new UIActivityIndicatorView();
spinner.TranslatesAutoresizingMaskIntoConstraints = false;
spinner.StartAnimating();
overlay.AddSubview(spinner);
overlay.AddConstraint(NSLayoutConstraint.Create(overlay, NSLayoutAttribute.CenterX, NSLayoutRelation.Equal, spinner, NSLayoutAttribute.CenterX, 1, 0));
overlay.AddConstraint(NSLayoutConstraint.Create(overlay, NSLayoutAttribute.CenterY, NSLayoutRelation.Equal, spinner, NSLayoutAttribute.CenterY, 1, 0));
overlay.AddSubview(label);
// can adjust space between by changing -30 to whatever
overlay.AddConstraint(NSLayoutConstraint.Create(spinner, NSLayoutAttribute.Bottom, NSLayoutRelation.Equal, label, NSLayoutAttribute.Top, 1, -30));
overlay.AddConstraint(NSLayoutConstraint.Create(overlay, NSLayoutAttribute.CenterX, NSLayoutRelation.Equal, label, NSLayoutAttribute.CenterX, 1, 0));
View.AddSubview(overlay);
View.AddConstraint(NSLayoutConstraint.Create(TopLayoutGuide, NSLayoutAttribute.Bottom, NSLayoutRelation.Equal, overlay, NSLayoutAttribute.Top, 1, 0));
View.AddConstraint(NSLayoutConstraint.Create(View, NSLayoutAttribute.CenterX, NSLayoutRelation.Equal, overlay, NSLayoutAttribute.CenterX, 1, 0));
View.AddConstraint(NSLayoutConstraint.Create(View, NSLayoutAttribute.Width, NSLayoutRelation.Equal, overlay, NSLayoutAttribute.Width, 1, 0));
View.AddConstraint(NSLayoutConstraint.Create(BottomLayoutGuide, NSLayoutAttribute.Top, NSLayoutRelation.Equal, overlay, NSLayoutAttribute.Bottom, 1, 0));
}
请注意TopLayoutGuide
中的BottomLayoutGuide
和NSLayoutConstraint
。它们代表当前视图控制器的顶部和底部,因此它们可用于调整大小,以便它们不会隐藏导航栏,标签栏等。