如何在导航栏下保留工具栏

时间:2016-07-09 20:27:26

标签: ios xcode swift uinavigationcontroller uitoolbar

我在导航控制器中嵌入了一个UITableViewController。我在导航栏下面放了一个工具栏来扩展它。它看起来像这样:

enter image description here

但是,当我向上滑动以查看更多表格视图单元格时,工具栏会在导航栏后面滑动并消失。当我移动表格单元格时,有没有办法将它永久地附加在导航栏下而不会移动它?

2 个答案:

答案 0 :(得分:0)

如果您将子视图添加到UITableViewController,则会滚动显示其内容。 UITableViewController是显示全屏表的特定类型的ViewController

要将其他子视图添加为固定标头,您可以创建一个UIViewController作为子视图的自定义UITableView。然后,您可以实施协议UITableViewDataSourceUITableViewDelegate以获得UITableViewController的功能。

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.tableView.delegate = self;
        self.tableView.dataSource = self;
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // change to data
        return 5;
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        // can also use custom cell from xib
        var cell:UITableViewCell? = tableView.dequeueReusableCellWithIdentifier("default");

        if cell == nil {
            cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "default");
        }

        cell!.textLabel!.text = "example";

        return cell!;
    }

}

storyboard example

还值得注意的是,如果您计划在故事板中的多个UIViewController上使用此工具栏,则应使用容器视图指定并重复使用它的设计。

答案 1 :(得分:0)

将表格样式设置为 UITableViewStyleGrouped ,并使用以下方法将工具栏添加为部分标题:

import java.awt.Dimension;
import javax.swing.*;

public class Game extends JPanel {
    private static final int PREF_W = 400;
    private static final int PREF_H = 300;
    private int prefW;
    private int prefH;

    public Game(int prefW, int prefH) {
        this.prefW = prefW;
        this.prefH = prefH;
    }

    public Game() {
        this(PREF_W, PREF_H);
    }

    @Override
    public Dimension getPreferredSize() {
        if (isPreferredSizeSet()) {
            return super.getPreferredSize();
        }
        return new Dimension(prefW, prefH);
    }

    private static void createAndShowGui() {
        int height = 500; 
        int width =(int) (height*1.56); //height = 500, width = 780;

        Game game = new Game(width, height);

        JFrame frame = new JFrame("Game");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.getContentPane().add(game);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);

        System.out.println("Frame size: " + frame.getSize());
        System.out.println("game size: " + game.getSize());
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> createAndShowGui());
    }
}