如何在UITableView中更改所选项的SeparatorColor

时间:2014-01-30 18:23:58

标签: ios uitableview xamarin

我有以下UITableView

_navigationList = new UITableView
    {
        Source = UINavigationTableViewSource,
        BackgroundColor = UIColor.FromRGB(43, 43, 43), // #2b2b2b - same as Android
        SeparatorColor = UIColor.FromRGB(27,27,27), // #1b1b1b - same as Android
        SeparatorInset = UIEdgeInsets.Zero,
        ScrollEnabled = true
    };

UINavigationTableViewSource正在使用自定义UITableViewCell

public sealed class UINavigationTableViewCell : UITableViewCell
{
    public new readonly UILabel TextLabel;

    public UINavigationTableViewCell(string cellId)
        : base(UITableViewCellStyle.Default, cellId)
    {
        TextLabel = new UILabel(new RectangleF(10, 0, Bounds.Width, 40)) {TextColor = UIColor.White}; // properly position the label.

        SeparatorInset = UIEdgeInsets.Zero; // make the boarder go all the way across the list item

        ContentView.BackgroundColor = UIColor.FromRGB(43, 43, 43); // #2b2b2b - same as Android

        var activeOrb = new UIImageView(new RectangleF(0,0,10,Bounds.Height))
            {
                Image = UIImage.FromBundle("Images/active_orb.png"), 
                ContentMode = UIViewContentMode.ScaleAspectFit
            };
        SelectedBackgroundView = new UIView { BackgroundColor = UIColor.FromRGB(43, 43, 43) };
        SelectedBackgroundView.Add(activeOrb);

        ContentView.Add(TextLabel);
    }
}

除了选定行上的丑陋白线外,一切都在寻找我们想要的方式。

如何在选择行时更改SeparatorColor?

enter image description here

1 个答案:

答案 0 :(得分:1)

我从未在xamarin编程,但我在ios(5-7)sdk上工作 我建议你不要使用任何seperators.Instead将分隔线添加到你的单元格view height-1pixel ; width-cellWidth)。


由ChaseFlorell编辑 - 工作示例

_navigationList = new UITableView
    {
        Source = UINavigationTableViewSource,
        BackgroundColor = UIColor.FromRGB(43, 43, 43), // #2b2b2b - same as Android
        SeparatorStyle = UITableViewCellSeparatorStyle.None,
        ScrollEnabled = true
    };
Add(_navigationList);
public sealed class UINavigationTableViewCell : UITableViewCell
{
    public new readonly UILabel TextLabel;

    public UINavigationTableViewCell(string cellId) : base(UITableViewCellStyle.Default, cellId)
    {
        // The default state
        TextLabel = new UILabel(new RectangleF(10, 0, Bounds.Width, 40)) { TextColor = UIColor.White }; // properly position the label.

        ContentView.BackgroundColor = UIColor.FromRGB(43, 43, 43); // #2b2b2b - same as Android
        ContentView.Add(Separator(Bounds));
        ContentView.Add(TextLabel);

        // todo: move colors to a config file.

        // The selected state
        var activeOrb = new UIImageView(new RectangleF(0, 0, 10, Bounds.Height))
            {
                Image = UIImage.FromBundle("Images/active_orb.png"),
                ContentMode = UIViewContentMode.ScaleAspectFit
            };
        SelectedBackgroundView = new UIView { BackgroundColor = UIColor.FromRGB(43, 43, 43) };
        SelectedBackgroundView.Add(Separator(Bounds));
        SelectedBackgroundView.Add(activeOrb);
    }

    private static UIView Separator(RectangleF bounds)
    {
        return new UIView(new RectangleF(0, 0, bounds.Width, 1))
        {
            BackgroundColor = UIColor.FromRGB(27, 27, 27)
        };
    }
}