我有一个自定义的UIView类,我想在其中添加一堆子视图。这应该是一项简单的任务,但我似乎无法弄清楚为什么我的观点没有出现在用户界面上。
这里的示例和教程非常简单,我相信我已经正确实现了我的代码。我在AddSubview
添加了一个断点,容器有一个大小。
UIViewController类已经通过故事板添加了背景图像。
有人能帮我看看我可能错过的东西吗?我知道它很小。
以下是我的代码:
自定义视图类
public class RotaryWheel : UIView
{
int numberOfSections;
public RotaryWheel(CGRect frame,int sections): base(frame)
{
numberOfSections = sections;
DrawWheel();
}
public void DrawWheel()
{
// derive the center x and y
float centerX = (float)(Frame.Width / 2);
float centerY = (float)(Frame.Height / 2);
container = new UIView();
container.Frame = new RectangleF(centerX, centerY, 100, 100);
container.BackgroundColor = UIColor.White;
AddSubview(container);
}
}
我初始化视图的UIViewController 类
public partial class HomePageController : UIViewController
{
public override void LoadView()
{
base.LoadView();
rotaryWheel = new RotaryWheel(new CGRect(20f, (float)(View.Frame.Height / 2), (float)View.Frame.Size.Width, (float)View.Frame.Height / 2f), 7);
View.AddSubview(rotaryWheel);
}
}
答案 0 :(得分:1)
首先,请参阅loadView()。正如文档中提到的那样
如果要对视图执行任何其他初始化,请在viewDidLoad()方法中执行此操作。
我们永远不应该在LoadView
中初始化子视图,因此我尝试将该代码移至viewDidLoad
public override void ViewDidLoad()
{
base.ViewDidLoad();
RotaryWheel rotaryWheel = new RotaryWheel(new CGRect(20f, (float)(View.Frame.Height / 2), (float)View.Frame.Size.Width, (float)View.Frame.Height / 2f), 7);
View.AddSubview(rotaryWheel);
}
但看起来这样,子视图并没有像预期的那样定位。
将该代码移至ViewDidAppear
后,问题就消失了。
public override void ViewDidAppear(bool animated)
{
base.ViewDidAppear(animated);
if(rotaryWheel == null){
rotaryWheel = new RotaryWheel(new CGRect(20f, (float)(View.Frame.Height / 2), (float)View.Frame.Size.Width, (float)View.Frame.Height / 2f), 7);
View.AddSubview(rotaryWheel);
}
}
View
的实际尺寸出现在方法ViewDidAppear
中。如果您不使用autoLayout,则应谨慎管理视图Frame
。
为什么你没有看到子视图,我猜你选择了iphone4,iPhone 5或iPhone5S模拟器进行测试,屏幕宽度为320,你创建了RotaryWheel,X = 20,centerX是300的方法LoadView
,因此显示在屏幕外。