【问题标题】:C# iOS scrolling issueC# iOS 滚动问题
【发布时间】:2018-07-19 03:19:33
【问题描述】:

我有一个我编写的 Xamarin C# IOS 应用程序,使用 uitableviewsource 来显示无序列表。一切看起来都很好,直到我向上滚动,然后文本向上进入标题,当我向下滚动时它消失了。

header的代码如下 公共覆盖 UIView GetViewForHeader(UITableView tableView, nint section) { UIView view = new UIView(new Rectangle(0, 65, 320, 90));

        UILabel label = new UILabel
        {
            Opaque = true,
            TextColor = UIColor.Black, //.FromRGB(190, 0, 0);
            Font = UIFont.FromName("Helvetica-Bold", 16f),
            Frame = new RectangleF(12, 70, 375, 20),
            Text = "View Mileage",
            TextAlignment = UITextAlignment.Center
        };
        view.AddSubview(label);

        UIButton buttonRect = new UIButton
        {
            Opaque = true,
            BackgroundColor = UIColor.FromRGB(191, 187, 189),
            Font = UIFont.FromName("Helvetica-Bold", 16f),
            Frame = new CGRect(145, 19, 100, 40)
        };
        buttonRect.SetTitle("Main Menu", UIControlState.Normal);
        buttonRect.SetTitleColor(UIColor.Black, UIControlState.Normal);
        buttonRect.HorizontalAlignment = UIControlContentHorizontalAlignment.Center;
        buttonRect.VerticalAlignment = UIControlContentVerticalAlignment.Center;
        buttonRect.TouchUpInside += delegate
        {
            UIStoryboard Storyboard = UIStoryboard.FromName("Main", null);

            var webController = Storyboard.InstantiateViewController("MainMenuViewController") as MainMenuViewController;

            Window = new UIWindow(UIScreen.MainScreen.Bounds);
            this.Window.RootViewController = webController;
            this.Window.MakeKeyAndVisible();

        };
        view.AddSubview(buttonRect);

        UIButton buttonDate = new UIButton
        {
            Opaque = true,
            BackgroundColor = UIColor.Brown,
            Font = UIFont.FromName("Helvetica-Bold", 13f),
            Frame = new CGRect(35, 105, 50, 25)
        };
        buttonDate.SetTitle("Date", UIControlState.Normal);
        buttonDate.SetTitleColor(UIColor.White, UIControlState.Normal);
        buttonDate.HorizontalAlignment = UIControlContentHorizontalAlignment.Center;
        buttonDate.VerticalAlignment = UIControlContentVerticalAlignment.Center;
        buttonDate.TouchUpInside += delegate
        {
            dataList.Sort((x, y) => x.Date.CompareTo(y.Date));
            if (dateCounter % 2 != 0)
                dataList.Reverse();
            tableView.ReloadData();
            dateCounter++;
        };
        view.AddSubview(buttonDate);

        UIButton buttonMiles = new UIButton
        {
            Opaque = true,
            BackgroundColor = UIColor.Brown,
            Font = UIFont.FromName("Helvetica-Bold", 13f),
            Frame = new CGRect(100, 105, 50, 25)
        };
        buttonMiles.SetTitle("Miles", UIControlState.Normal);
        buttonMiles.SetTitleColor(UIColor.White, UIControlState.Normal);
        buttonMiles.HorizontalAlignment = UIControlContentHorizontalAlignment.Center;
        buttonMiles.VerticalAlignment = UIControlContentVerticalAlignment.Center;
        buttonMiles.TouchUpInside += delegate
        {
            dataList.Sort((x, y) => x.Miles.CompareTo(y.Miles));
            if (milesCounter % 2 == 0)
                dataList.Reverse();
            tableView.ReloadData();
            milesCounter++;
        };
        view.AddSubview(buttonMiles);

        UIButton buttonGas = new UIButton
        {
            Opaque = true,
            BackgroundColor = UIColor.Brown,
            Font = UIFont.FromName("Helvetica-Bold", 13f),
            Frame = new CGRect(174, 105, 50, 25)
        };
        buttonGas.SetTitle("Gas", UIControlState.Normal);
        buttonGas.SetTitleColor(UIColor.White, UIControlState.Normal);
        buttonGas.HorizontalAlignment = UIControlContentHorizontalAlignment.Center;
        buttonGas.VerticalAlignment = UIControlContentVerticalAlignment.Center;
        buttonGas.TouchUpInside += delegate
        {
            dataList.Sort((x, y) => x.Gas.CompareTo(y.Gas));
            if (gasCounter % 2 == 0)
                dataList.Reverse();
            tableView.ReloadData();
            gasCounter++;
        };
        view.AddSubview(buttonGas);

        UIButton buttonMpg = new UIButton
        {
            Opaque = true,
            BackgroundColor = UIColor.Brown,
            Font = UIFont.FromName("Helvetica-Bold", 13f),
            Frame = new CGRect(244, 105, 50, 25)
        };
        buttonMpg.SetTitle("MPG", UIControlState.Normal);
        buttonMpg.SetTitleColor(UIColor.White, UIControlState.Normal);
        buttonMpg.HorizontalAlignment = UIControlContentHorizontalAlignment.Center;
        buttonMpg.VerticalAlignment = UIControlContentVerticalAlignment.Center;
        buttonMpg.TouchUpInside += delegate
        {
            dataList.Sort((x, y) => x.MPG.CompareTo(y.MPG));
            if (mpgCounter % 2 == 0)
                dataList.Reverse();
            tableView.ReloadData();
            mpgCounter++;
        };
        view.AddSubview(buttonMpg);

        UIButton buttonCost = new UIButton
        {
            Opaque = true,
            BackgroundColor = UIColor.Brown,
            Font = UIFont.FromName("Helvetica-Bold", 13f),
            Frame = new CGRect(314, 105, 50, 25)
        };
        buttonCost.SetTitle("Cost", UIControlState.Normal);
        buttonCost.SetTitleColor(UIColor.White, UIControlState.Normal);
        buttonCost.HorizontalAlignment = UIControlContentHorizontalAlignment.Center;
        buttonCost.VerticalAlignment = UIControlContentVerticalAlignment.Center;
        buttonCost.TouchUpInside += delegate
        {
            dataList.Sort((x, y) => x.Price.CompareTo(y.Price));
            if (costCounter % 2 == 0)
                dataList.Reverse();
            tableView.ReloadData();
            costCounter++;
        };
        view.AddSubview(buttonCost);
        return view;
    }

我正在使用 UITableViewCell 填充表格视图,如下所示;

public void SetData(string str0, string str1, string str2, string str3, int id, string str4)
        {
            lbC0.Text = str0;
            lbC1.Text = str1;
            lbC2.Text = str2;
            lbC3.Text = str3;
            lbcst.Text = str4;
            lbId.Text = id.ToString();
        }

        public override void LayoutSubviews()
        {
            nfloat lbWidth = Bounds.Width / 4;
            nfloat lbWidth2 = lbWidth - 35;
            nfloat lbWidth3 = lbWidth2 + 70;
            nfloat lbWidth4 = lbWidth3 + 70;
            nfloat lbWidth5 = lbWidth4 + 65;
            nfloat lbWidth6 = lbWidth5 + 75;
            nfloat lbHeight = this.Bounds.Height;
            if (lbC0 != null)
            {
                lbC0.Frame = new CGRect(2, 55, lbWidth, lbHeight);
                lbC1.Frame = new CGRect(lbWidth2, 55, lbWidth, lbHeight);
                lbC2.Frame = new CGRect(lbWidth3, 55, lbWidth, lbHeight);
                lbC3.Frame = new CGRect(lbWidth4, 55, lbWidth, lbHeight);
                lbcst.Frame = new CGRect(lbWidth5, 55, lbWidth, lbHeight);
            }
        }

任何帮助将不胜感激。

谢谢

【问题讨论】:

    标签: c# ios


    【解决方案1】:

    我花了数周时间寻找答案。我最终发现我需要在 TableViewCell 范围内的子视图范围。这一切都很好,但我不知道如何做到这一点。我尝试了所有找到的方法,但均无济于事。最终为我解决的是这个。在我的 LayoutSubviews 方法中,当设置子视图的高度时,我从 Bounds.Height 中减去 100 并修复它,它现在可以上下滚动。多么简单的解决方法……很难找到

    这是我修改的代码;

    public override void LayoutSubviews()
            {
                nfloat lbWidth = Bounds.Width / 4;
                nfloat lbWidth2 = lbWidth - 35;
                nfloat lbWidth3 = lbWidth2 + 70;
                nfloat lbWidth4 = lbWidth3 + 70;
                nfloat lbWidth5 = lbWidth4 + 65;
                nfloat lbWidth6 = lbWidth5 + 75;
             -->nfloat lbHeight = this.Bounds.Height - 100;<--
                if (lbC0 != null)
                {
                    lbC0.Frame = new CGRect(2, 55, lbWidth, lbHeight);
                    lbC1.Frame = new CGRect(lbWidth2, 55, lbWidth, lbHeight);
                    lbC2.Frame = new CGRect(lbWidth3, 55, lbWidth, lbHeight);
                    lbC3.Frame = new CGRect(lbWidth4, 55, lbWidth, lbHeight);
                    lbcst.Frame = new CGRect(lbWidth5, 55, lbWidth, lbHeight);
                }
            }
    

    【讨论】:

      猜你喜欢
      • 2020-04-06
      • 2015-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多